【发布时间】:2015-01-31 13:18:46
【问题描述】:
在 rust 1.0.0-nightly 中,此代码运行良好:
fn main() {
let x = 10f64;
let y = 20f64;
let z = x + y;
println!("z = {}", z);
}
但是如果我尝试使用新类型(根据rust book):
struct Metres(f64);
fn main() {
let x = Metres(10f64);
let y = Metres(20f64);
let z = x + y;
println!("z = {}", z);
}
我得到这个编译器错误:
test.rs:6:13: 6:18 error: binary operation `+` cannot be applied to type `Metres`
test.rs:6 let z = x + y;
^~~~~
error: aborting due to previous error
既然Metres基本上是f64,为什么编译器不能使用同样的+操作符,为z创建一个新的Metres对象?
如果我不能做诸如添加之类的简单事情,我该如何使用新类型?它们如何“非常有用”(正如书中所说)?
(有一个 old question 关于这个,但是 rust 变化很大,所以我再问)
【问题讨论】: