为什么 Rust 不能完全推断其变量的所有权?为什么需要注释?
问问题
86 次
1 回答
2
如果这是可能的,我相信这将是一个糟糕的用户体验,因为:
- 如果编译器无法推断出对象的所有权,则几乎无法理解错误(如 C++ 模板链接中的试错法);
- 所有权政策似乎并不容易掌握(尽管这是一种观点),并且试图了解编译器选择了哪种语义可能会导致意外行为(参考 Javascript 奇怪的类型转换);
- 可以在重构过程中引入更多错误(由上述观点暗示);
- 如果它甚至是一个可解决的问题,那么完整的程序推理肯定会花费大量时间。
但是,如果您因缺乏多态性而苦苦挣扎,通常可以使用所有权类型对方法进行参数化,这可能被认为是推理的某种明确的替代方案,例如:
fn print_str(s: impl AsRef<str>) {
println!("{}", s.as_ref());
}
fn main() {
print_str("borrowed");
print_str("owned".to_owned());
}
于 2020-06-27T12:23:51.757 回答