【发布时间】:2017-01-19 00:15:39
【问题描述】:
考虑以下示例程序:
struct Data {
output: Vec<u8>,
array: Vec<u8>
}
impl Data {
fn peek(&self) -> u8 {
self.array[0]
}
fn write(&mut self) {
self.output.push(self.peek());
}
}
fn main() {
}
(忽略方法的命名,在更大的实际实现范围内更有意义)
当我尝试编译这个时,我得到一个错误,我不能从 self 借用 self 而 self 是可变借用的。
test.rs:11:26: 11:30 错误:不能将
*self借用为不可变,因为self.output也被借用为可变的
我理解它在这里所表达的概念;我不明白如何解决这个问题。实际上,peek 不仅仅是读取第零个元素,我不想重复 peek inside write 的逻辑;必须有一种方法可以在 Rust 中实现这一点。写入和窥视使用完全不同的结构成员,因此这里出现竞争条件的可能性为零。
我是 Rust 的新手,所以如果我遗漏了一些明显的东西,或者我违反了设计模式或最佳实践,我不会感到惊讶。如果是这种情况,请告诉我。
【问题讨论】:
标签: methods struct rust borrow-checker