今天在做rustlings的练习题遇到了一些自己不太理解的地方, 望大佬能指点一下, 谢谢. // traits2.rs // // Your task is to implement the trait `AppendBar` for a vector of strings. To // implement this trait, consider for a moment what it means to 'append "Bar"' // to a vector of strings. // // No boiler plate code this time, you can do this! // // Execute `rustlings hint traits2` or use the `hint` watch subcommand for a hint. // I AM NOT DONE trait AppendBar { fn append_bar(self) -> Self; } // TODO: Implement trait `AppendBar` for a vector of strings. impl AppendBar for Vec { fn append_bar(mut self) -> Self { // Borrow self as `mut` self.push("Bar".to_string()); self } } #[cfg(test)] mod tests { use super::*; #[test] fn is_vec_pop_eq_bar() { let mut foo = vec![String::from("Foo")].append_bar(); assert_eq!(foo.pop().unwrap(), String::from("Bar")); assert_eq!(foo.pop().unwrap(), String::from("Foo")); } } 第一个问题: 在impl AppendBar for Vec的时候 特征和实现的函数签名不一致, 这样是可以的吗? 第二个问题: self.push("Bar".to_string()); push的函数签名需要&mut self, 这应该和Deref没有关 系, 我记得隐式的调用Deref需要&T, Box, Cell总之是需要外面包裹一层指针才会隐 式的调用Deref, 请问这里为什么可以直接使用push