gpt4 book ai didi

rust - 为什么 std::ops:Mul 不需要限制输出类型?

转载 作者:行者123 更新时间:2023-12-03 11:30:16 25 4
gpt4 key购买 nike

为了编译下面的代码,我必须指定 Add 操作的输出类型。但是,使用 Mul 操作的非常相似的代码不需要此规范。为什么这里的 Add 和 Mul 操作有区别?

trait IdentityExt {
fn identity(self) -> Self;
}

impl<T> IdentityExt for T where T: std::ops::Mul, T: num::One {
fn identity(self) -> T {
self * T::one()
}
}

trait IncrementExt {
fn increment(self) -> Self;
}

//impl<T> IncrementExt for T where T: std::ops::Add, T: num::One { // Doesn't compile
impl<T> IncrementExt for T where T: std::ops::Add<Output = T>, T: num::One {
fn increment(self) -> T {
self + T::one()
}
}

fn main() {
let x = 13;

println!("{:?}", x.increment());
println!("{:?}", x.identity());
}

Playground link

最佳答案

因为 One trait 已经做到了,pub trait One: Mul<Self, Output = Self> .所以,你可以写 impl<T> IdentityExt for T where T: num::One { .

他们添加它是因为他们希望 One 跟随:

a * 1 = a       ∀ a ∈ Self
1 * a = a ∀ a ∈ Self

关于rust - 为什么 std::ops:Mul 不需要限制输出类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106905/

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