首页 > 解决方案 > 从 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
}

谁能解释如何实现我想要的。

标签: rustreference

解决方案


这可以通过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()
    }
}

(操场)

只有最后一件事。符合社区命名约定,totalPagesnewPage应具有snake_case名称,如total_pagesnew_page. 编译器会对此发出警告。


推荐阅读