我正在使用一些 Rust Traits 和 Generics 来熟悉该语言。
fn main() {
println(test(6f).to_str());
}
enum Result<TS,TE>{
Success(TS),
Error(TE)
}
impl<TS: ToStr, TE: ToStr> ToStr for Result<TS,TE> {
fn to_str(&self) -> ~str {
match *self {
Success(s) => s.to_str(),
Error(e) => e.to_str()
}
}
}
fn test(x:float) -> Result<float,int> {
match x {
0f..5f => Success(x/5f),
_ => Error(1i)
}
}
我用上面的代码得到了以下错误。
C:\Users\mflamer\Dropbox\Rust Projects\Tests\rust.rs:27:8: 27:13 错误:移出不可变和指针的取消引用 C:\Users\mflamer\Dropbox\Rust Projects\Tests\rust .rs:27 匹配 *self
^~~~~
如果没有特征上的泛型,它就可以很好地构建。这里发生了什么?
编辑:如果我将代码更改为此它可以工作。不知道为什么。
enum Result<TS,TE>{
Success{ value:TS },
Error{ error:TE }
}
impl<TS: ToStr, TE: ToStr> ToStr for Result<TS,TE> {
fn to_str(&self) -> ~str {
match *self {
Success{ value: value } => value.to_str(),
Error{ error: error } => error.to_str()
}
}
}
fn test(x:float) -> Result<float,int> {
match x {
0f..5f => Success{ value: x/5f },
_ => Error{ error: 1i }
}
}