锈:借错订单错了?

时间:2014-03-10 10:11:19

标签: rust

编程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);
}

这是一个错误吗?如果没有,为什么借用检查器会以这种方式强制执行编码?

1 个答案:

答案 0 :(得分:2)

是的,这是一个错误:#6268

借用检查器似乎不理解在调用原始方法时对参数进行了全面评估,因此认为&mut self的{​​{1}}与get_text的{​​{1}}存在别名&self(并且使用别名bark指针是非法的。)