是否有一行语法用于构造包含对临时对象的引用的结构?

2023-11-30

考虑以下无效的 Rust 代码。有一个结构体Foo包含对第二个结构的引用Bar:

struct Foo<'a> {
    bar: &'a Bar,
}

impl<'a> Foo<'a> {
    fn new(bar: &'a Bar) -> Foo<'a> {
        Foo { bar }
    }
}

struct Bar {
    value: String,
}

impl Bar {
    fn empty() -> Bar {
        Bar {
            value: String::from("***"),
        }
    }
}

fn main() {
    let foo = Foo::new(&Bar::empty());
    println!("{}", foo.bar.value);
}

编译器不喜欢这样:

error[E0716]: temporary value dropped while borrowed
  --> src/main.rs:24:25
   |
24 |     let foo = Foo::new(&Bar::empty());
   |                         ^^^^^^^^^^^^ - temporary value is freed at the end of this statement
   |                         |
   |                         creates a temporary which is freed while still in use
25 |     println!("{}", foo.bar.value);
   |                    ------------- borrow later used here
   |
   = note: consider using a `let` binding to create a longer lived value

我可以通过执行编译器所说的操作来使其工作 - 使用let捆绑:

fn main() {
    let bar = &Bar::empty();
    let foo = Foo::new(bar);
    println!("{}", foo.bar.value);
}

然而,突然间我需要两行代码来处理一些琐碎的事情,例如实例化我的Foo。有没有一种简单的方法可以一次性解决这个问题?


不,除了您输入的语法之外,没有这样的语法。

有关引用临时对象时其生存时间的详细信息,请参阅:

  • 为什么临时借用是合法的?

将有一个父结构体同时拥有barfoo正在引用它。

祝你好运:

  • 为什么我不能在同一结构中存储值和对该值的引用?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有一行语法用于构造包含对临时对象的引用的结构? 的相关文章

随机推荐

  • 使用 GSON 反序列化嵌套 JSON 字符串

    全部 我有以下内容JSON输出 字符串 来自 JIRA API 的响应 expand names schema startAt 0 maxResults 50 total 1 issues expand operations version
  • Java:找到大写字母时分割字符串

    我认为这是一个简单的问题 但我无法找到一个简单的解决方案 比如说 少于 10 行代码 我有一个String例如 thisIsMyString 我需要将其转换为String this Is My String 请注意第一个字母不是大写 您可以
  • Visual Studio代码:在输入代码片段时替换字符大小写

    我正在尝试为 Visual Studio Code 和 TypeScript 编写代码片段 到目前为止 我成功地镜像了这样的输入单词 import 1 Name Component from 1 name component 当我在第 1
  • 集群环境下如何使用redis扫描?

    我正在使用 spring redisTemplate 和 redis 扫描 它可以在单节点的情况下查找 但在集群环境下就不行了 我无法获取数据 有没有办法在集群环境下获取扫描数据 这是我的 spring redisTemplate 代码 S
  • 将一个函数作为参数传递给另一个函数

    我看到一个函数像这样传递 sigma 3 e 2 svmTrain X y gaussianKernel X y sigma 这样的函数传递是怎么回事 有人能解释一下吗 语法 X y gaussianKernel X y sigma 创建一
  • Visual Studio:通过电源控制台添加项目文件失败

    我的任务是在一个解决方案中添加 384 个现有项目 以便用项目依赖项替换二进制文件依赖项并使用 msbuild 进行构建 为了实现这一目标 我尝试使用 Visual Studio API 来自动将项目添加到解决方案中 我实际上是 Windo
  • 如何从画布中添加和删除(多个)图像?

    我是画布 HTML5 新手 我必须在画布上设计一个绘画应用程序 有一个功能 例如在画布上动态添加所选图像 通过鼠标移动 以及删除和拖动添加的图像的功能 与文本添加相同 现在我的问题是我们如何从画布中删除图像 注意 添加到画布中的图像没有固定
  • 如何在TYPO3 CMS后端重命名副标题

    如何为作者重命名 TYPO3 CMS 后端字段 即提到的 csc styled content 内容元素字段 一般来说 覆盖标签名称可以通过后端的 Page TSconfig 来完成 下面的例子修改了标签subheader field TC
  • 你调用的对象是空的

    我有一个单元格类 public class Cell public enum cellState WATER SCAN SHIPUNIT SHOT HIT public Cell currentCell cellState WATER Me
  • 静态变量的动态初始化阶段

    该标准特别指出 静态持续时间变量 命名空间范围和类静态成员 的动态初始化不必在执行 main 之前发生 命名空间范围的对象的动态初始化 8 5 9 4 12 1 12 6 1 是否在 main 的第一个语句之前完成 是由实现定义的 IS 3
  • Jenkins-pipeline 从 groovy 中的属性文件中提取并设置变量

    首先 我将管道完全编写为 groovy 以便签入 git 请不要提供任何gui必要的解决方案 我的问题陈述是 从文件中提取变量并将其设置为等于 groovy 对象 我尝试过的 def SERVICE MAJOR VERSION node r
  • JavaScript Promise 通过 setTimeout 解决

    我不明白为什么第一个 setTimeout 函数起作用 但第二个函数不起作用 当我运行第二个 setTimeout 时 第一个被注释掉 但不是 3 秒后解决 而是立即解决 我对整个 承诺 事物很陌生 我正在学习的教程经常使用带有 setTi
  • Android 应用程序的数据大小增加是 Glide 造成的吗?

    当我使用 glide 库打开并加载少量 100 张图像时 Android 应用程序的数据大小增加了 13MB 我没有管理 glide 的任何缓存属性 全部设置为默认值 glide 的磁盘缓存是否有可能导致此问题 注意 图像大小范围为 100
  • 不可重复读和幻读有什么区别?

    有什么区别不可重复读 and 幻读 我已阅读维基百科的隔离 数据库系统 文章 但我有一些疑问 在下面的示例中 将会发生什么 不可重复读 and 幻读 交易A SELECT ID USERNAME accountno amount FROM
  • 引用变量在内存中是如何表示的?

    int num 0 int ptrNum num int refNum num 内存表 1 和表 2 中引用变量的正确表示哪一个是 如果表2 那么为什么指针是对象而引用不是 如果两种表示都不正确 请提供正确的表示并解释为什么引用不是对象 内
  • 迭代枚举类实例

    有没有一种简单的方法可以迭代 Ceylon 中类的所有枚举实例 就像values 对于 Java 枚举 abstract class Suit of hearts diamonds clubs spades shared formal St
  • 如何在 C 中捕获进程输出?

    有没有用 C 语言模拟 PHP 系统的情况 man system说 那system返回命令的状态 但我需要输出 就像在 PHP 中一样 当然 我可以使用管道来实现这一点 但是有什么标准的方法吗 您可以利用popen相关函数为 command
  • 使用交叉编译器为arm编译原生GCC

    我正在寻找为 ARM 系统创建 GCC 的本机版本 但遇到了一些麻烦 构建机器是 i686 linux 我看到的每个教程都告诉我如何设置实际的交叉编译套件 我已经使用 crosstools ng 完成了 但是 我没有看到任何与编译本机 AR
  • EXTJS 5 - 仅日期选择器年和月

    我想这个问题已经被问了很多次 因为我发现了一些有关它的主题 但我仍然不知道如何通过仅显示月份和年份来呈现日期选择器 我想我可以用不同的方式来做这件事 创建我自己的 cuctom 组件 但我认为我对 Extjs 的了解还不够好 无法创建一个显
  • 是否有一行语法用于构造包含对临时对象的引用的结构?

    考虑以下无效的 Rust 代码 有一个结构体Foo包含对第二个结构的引用Bar struct Foo lt a gt bar a Bar impl lt a gt Foo lt a gt fn new bar a Bar gt Foo lt