gpt4 book ai didi

rust - 为什么新类型不使用内部类型的特征?

转载 作者:行者123 更新时间:2023-11-29 07:45:59 24 4
gpt4 key购买 nike

在 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 变化很大,所以我重新提问)

最佳答案

新类型以这种方式工作的原因通常是因为您想要避免在基础类型上定义的特征。例如,您可以有 MetresFeet,它们都包装 f64 但定义了 Metres英尺 进行单位转换,普通的 f64 加法不会给你。

当然,有时您确实需要底层特征实现。目前,您必须自己编写一个包装器实现,但是有一个 RFC 可以自动生成这些:https://github.com/rust-lang/rfcs/issues/479

关于rust - 为什么新类型不使用内部类型的特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28252038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com