Rust でコンパイルエラー
このプログラムを、ビルドすると所有権がらみのエラーになります。
エラーメッセージにある通りに、一旦、ローカル変数を経由して、2行に分けるだけで、解決してしまいます。。汗
なぜ?
fn main() { let mut h = Hoge { hoge2 : 0 }; h.hoge3(); } struct Hoge { hoge2:usize, } impl Hoge { fn get_byte(&mut self)->u8 { 0 } fn format_byte(&mut self , address:u8 ) ->String { let s = format!("{:02X}H",address); s } fn hoge3(&mut self) { println!( "{}",format!("OR {}",self.format_byte(self.get_byte() ))); // A //let a = self.get_byte(); // B //println!( "{}",format!("OR {}",self.format_byte( a ))); // B } }
⣿ Standard Error Compiling playground v0.0.1 (/playground) error[E0499]: cannot borrow `*self` as mutable more than once at a time --> src/main.rs:19:60 | 19 | println!( "{}",format!("OR {}",self.format_byte(self.get_byte() ))); // A | -----------------^^^^^^^^^^^^^^^-- | | | | | | | second mutable borrow occurs here | | first borrow later used by call | first mutable borrow occurs here | help: try adding a local storing this argument... --> src/main.rs:19:60 | 19 | println!( "{}",format!("OR {}",self.format_byte(self.get_byte() ))); // A | ^^^^^^^^^^^^^^^ help: ...and then using that local as the argument to this call --> src/main.rs:19:43 | 19 | println!( "{}",format!("OR {}",self.format_byte(self.get_byte() ))); // A | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ For more information about this error, try `rustc --explain E0499`. error: could not compile `playground` due to previous error Standard Output