rust - 从 rust 中的函数返回参考值
问题描述
我正在开发一个 pdf 生成应用程序。我有一个拥有所有页面的结构(文档)。每当我想添加一个页面时,我也想给调用者一个借用的页面值,所以文档仍然是结构的所有者。就像在 C 中返回一个指针一样。
pub struct Document {
pages: Vec<Page>,
totalPages: i32,
_secret: ()
}
pub fn add_page(&mut self, dimension: PageDimension) -> &mut Page {
let newPage = Page::new(self.pages.len(), dimension);
self.pages.push(newPage);
newPage
}
谁能解释如何实现我想要的。
解决方案
这可以通过Vec::last_mut()
方法来完成。您必须解开它返回的选项,但不要惊慌,因为您只是推入了一个新元素。
这是一个最小的可重现示例。如果您想要更快/更好的答案,您应该自己提供其中之一。没有一个,很难知道到底是什么意思。也请查看此页面以获取针对 MRE 的一些特定于 Rust 的建议。
pub struct PageDimension;
pub struct Page(usize, PageDimension);
impl Page {
fn new(page_number: usize, dimension: PageDimension) -> Self {
Self(page_number, dimension)
}
}
pub struct Document {
pages: Vec<Page>,
totalPages: i32,
_secret: (),
}
impl Document {
pub fn add_page(&mut self, dimension: PageDimension) -> &mut Page {
let newPage = Page::new(self.pages.len(), dimension);
self.pages.push(newPage);
self.pages.last_mut().unwrap()
}
}
只有最后一件事。符合社区命名约定,totalPages
并newPage
应具有snake_case
名称,如total_pages
和new_page
. 编译器会对此发出警告。
推荐阅读
- kubernetes - 无法通过 Istio 中的虚拟服务访问服务
- python - 大熊猫中两个非标题行的字典
- c# - 如何从我的 WebAPI 服务的 JSON 输出中删除回车?
- ruby-on-rails - 如何让 Rails 4 在自定义序列化程序上使用嵌套根序列化 ActiveModel JSON?
- javascript - 如何通过传递 TZ 格式来获取时区的 BCL 格式
- c - 为什么 scanf 只返回它已成功读取的输入数?
- jquery - 某些 PC 出现错误是加载资源失败:服务器响应状态为 414 (Request-URI Too Long)
- spring-security - 我们可以在编写自定义身份验证提供程序时添加密码编码器吗?
- java - java进程“无响应”的分析?
- hive - 使用分区创建 hive 外部表