<分区>
我一直在用 Rust 开发一个简单的词法分析器。但是,我遇到了 error[E0502]: cannot borrow 'a_rule' as immutable because it is also borrowed as mutable
问题。我检查了其他答案,但似乎找不到原因。
pub struct Rule<'a> {
selector: &'a str,
}
impl<'a> Rule<'a> {
pub fn new(selector: &'a str) -> Self {
Self {
selector
}
}
pub fn get_selector(&'a self) -> &'a str {
self.selector
}
pub fn set_selector(&'a mut self, selector: &'a str) {
self.selector = selector
}
}
#[cfg(test)]
mod tests {
use super::Rule;
#[test]
fn set_selector_test() {
let mut a_rule = Rule::new(".foo");
a_rule.set_selector(".bar");
assert_eq!(a_rule.get_selector(), ".bar")
}
}
错误:
error[E0502]: cannot borrow `a_rule` as immutable because it is also borrowed as mutable
--> src/lib.rs:30:20
|
28 | a_rule.set_selector(".bar");
| ------ mutable borrow occurs here
29 |
30 | assert_eq!(a_rule.get_selector(), ".bar")
| ^^^^^^
| |
| immutable borrow occurs here
| mutable borrow later used here
( Playground )
我还想借此机会询问是否建议使用 java 类似 get 和 set 方法,或者只是将结构中的成员设置为公共(public)。
请随时指出任何其他愚蠢的错误。