编程Sudoku Solver in Rust时我遇到了一些与借用相关的代码问题。虽然这个问题很容易解决(但有点冗长),但编译器不接受第一个代码似乎很奇怪。
很难解释问题是什么,所以我做了一个小例子
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);
}
这是一个错误吗?如果没有,为什么借用检查器会以这种方式强制执行编码?
答案 0 :(得分:2)
是的,这是一个错误:#6268。
借用检查器似乎不理解在调用原始方法时对参数进行了全面评估,因此认为&mut self
的{{1}}与get_text
的{{1}}存在别名&self
(并且使用别名bark
指针是非法的。)