【问题标题】:Why does Rust require ownership annotations instead of inferring it? [duplicate]为什么 Rust 需要所有权注释而不是推断它? [复制]
【发布时间】:2020-10-17 22:31:43
【问题描述】:

Rust 为什么不能完全推断其变量的所有权?为什么需要注释?

【问题讨论】:

  • 什么是“所有权注释”?你的意思是self&self 是如何编写方法的不同方式?还是你的意思是生命周期注释?
  • @trentcl 好的链接,谢谢!我想基本原理是相似的,完全推断原则上是可能的,但可能不适合使用目的。

标签: rust ownership-semantics


【解决方案1】:

如果这是可能的,我相信这将是一个糟糕的用户体验,因为:

  • 如果编译器无法推断出对象的所有权,则几乎无法理解错误(例如 C++ 模板中的试错法link);
  • 所有权政策似乎并不容易掌握(尽管这是一种观点),并且试图了解编译器选择了哪种语义可能会导致意外行为(参考 Javascript 奇怪的类型转换);
  • 在重构过程中可能会引入更多错误(由上面的一点暗示);
  • 如果是一个可解决的问题,完整的程序推理肯定会花费大量时间。

但是,如果您在缺乏多态性方面遇到困难,通常可以使用所有权类型对方法进行参数化,这可能被认为是推理的某种明确的替代方案,例如:

fn print_str(s: impl AsRef<str>) {
    println!("{}", s.as_ref());
}

fn main() {
    print_str("borrowed");
    print_str("owned".to_owned());
}

【讨论】:

猜你喜欢
  • 2022-07-16
  • 2022-08-02
  • 2023-01-18
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
相关资源
最近更新 更多