Rust 生锈:借错了吗?
在编程a时,我遇到了一些与借用相关的代码问题。虽然这个问题很容易解决(有点冗长),但对于我来说,编译器不接受第一个代码似乎很奇怪 很难解释问题是什么,所以我举了一个小例子Rust 生锈:借错了吗?,rust,Rust,在编程a时,我遇到了一些与借用相关的代码问题。虽然这个问题很容易解决(有点冗长),但对于我来说,编译器不接受第一个代码似乎很奇怪 很难解释问题是什么,所以我举了一个小例子 use io::stdio::println; struct Dog; impl Dog { fn bark(&self, text: &str) { println(text); } fn get_text(&mut self) -> ~str {
use io::stdio::println;
struct Dog;
impl Dog {
fn bark(&self, text: &str) {
println(text);
}
fn get_text(&mut self) -> ~str {
~"some text"
}
}
fn main() {
let mut dog = Dog;
// This causes an error
dog.bark(dog.get_text());
// But this is allowed
let text = dog.get_text();
dog.bark(text);
}
这是虫子吗?如果没有,为什么借阅检查器会以这种方式执行编码?是的,这是一个错误:
借用检查器似乎不理解在调用原始方法时已对参数进行了完全评估,因此认为get_text
的&mut self
与bark
的&self
存在别名(并且具有别名&mut
指针是非法的)