【问题标题】:What is the scope of the returned value in Rust?Rust 中返回值的范围是什么?
【发布时间】:2015-02-24 10:11:06
【问题描述】:

当变量引用的数据返回给调用者时会发生什么?当数据被销毁并且可能 Drop trait 被执行?

【问题讨论】:

  • 请将代码贴在您尝试过的地方,但没有成功。如果你没有尝试任何代码,为什么你认为它不可能?
  • 我原来的描述不擅长描述问题。这真的不需要任何代码示例,我认为这是一个合理的问题(更新后)。
  • 你能解释一下你所说的“范围”是什么意思吗?我仍然相信一些代码示例(甚至是伪代码)可以帮助我们理解您想知道的内容。据我所知,您的问题的答案是“这取决于它的名称”(假设您的意思是函数的返回值)。
  • 例如,当您有一个实现 Drop 特征的结构时。如果从函数返回该类型的值,在离开该函数时会调用 drop() 还是稍后?

标签: rust ownership-semantics memory-safety


【解决方案1】:

看起来你可以(为什么不呢?):

use std::io::File;

fn open_file(path: &Path) -> File {
  let file = File::open(path).unwrap() ;
  file
}


fn main() {
  let path = Path::new("hello.txt");
  let mut file = open_file(&path);

  let str =  file.read_to_string().unwrap();
  println!("Contents of {}:\n{}\n", path.display(), str);
}

【讨论】:

    【解决方案2】:

    写这个问题的时候,我没有理解 Rust 中数据的生命周期。返回一个值会导致数据的所有权转移到调用者分配的变量。微不足道,但当我写这个问题时,我才刚刚开始尝试这种语言:)

    【讨论】:

      猜你喜欢
      • 2016-01-31
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2021-06-29
      • 2022-08-18
      相关资源
      最近更新 更多