这个编译不了为什么
编译器对set_fred()方法很满意,但对get_fred()和get_fred_mut()不满意,因为它们引用了同一个Fred(String)。
fn main() {
println!("Unable to compile enum impl methods with values");
}
enum Flintstone {
Fred(String),
Wilma(i32),
}
impl Flintstone {
fn set_fred(&mut self, fred: String) {
*self = Flintstone::Fred(fred);
}
// error[E0609]: no field `Fred` on type `Flintstone`
fn get_fred(self) -> String {
self.Fred
}
// error[E0609]: no field `Fred` on type `&mut Flintstone`
fn get_fred_mut(&mut self) -> &mut String {
&mut self.Fred
}
}
1条答案
按热度按时间gwbalxhn1#
他们有几个问题。
首先是这个方法的签名
get_fred(self)
它应该是get_fred(&self)
看看下面的例子此处提供更全面的说明When to use self, &self, &mut self in methods?
接下来,枚举只有一种状态,在本例中是燧石族::Fred(字符串)或燧石族::Wilma(i32)。
所以你可以这样处理
而且那只杂种狗也没什么意义