gpt4 book ai didi

rust - One::one() 与 1 有什么区别

转载 作者:行者123 更新时间:2023-12-03 11:41:00 26 4
gpt4 key购买 nike

One::one() 和有什么区别只是号码1 ?有什么区别吗?

最佳答案

One::one()旨在用于我们不知道 numerical value 的确切类型的通用代码中。 .
可能是 1_i32 , 1.0 , 1_u8 ... 取决于确切的类型 One特质是必然的。

感谢下面有用的评论,这里有一个最小的例子来试图更好地说明(虽然已经很晚了)。
尝试使用 1 初始化一些变量如果它们被视为整数(此处为 ac),则有效。
另一方面,这不适用于真实的(b 这里); 1.0必须改为使用。
对于我们自己的非原始类型(此处为 Thing),One trait 有助于提供被视为 1 的值(注意 Mul 特征也必须在这种类型上实现)。One trait 在我们需要 1 时不知道确切类型的泛型函数中变得非常有用。值(如 mul_one() 此处)。

use num_traits::One;
use std::ops::Mul;

#[derive(Debug)]
struct Thing {
member: String,
}

// Mul<Self, Output = Self> is required for One
impl Mul for Thing {
type Output = Self;
fn mul(
self,
rhs: Self,
) -> Self {
Self {
member: self.member + "×" + &rhs.member,
}
}
}

impl One for Thing {
fn one() -> Self {
Self {
member: "one".to_owned(),
}
}
}

fn mul_one<T: One>(arg: T) -> T {
// arg * 1 // error: expected type parameter `T`, found integer
arg * T::one()
}

fn main() {
let a: i32 = 1;
// let b: f64 = 1; // error: expected `f64`, found integer
let b: f64 = 1.0;
let c: u8 = 1;
let d = Thing::one();
println!("{:?} {:?} {:?} {:?}", a, b, c, d);
let e = mul_one(a);
let f = mul_one(b);
let g = mul_one(c);
let h = mul_one(d);
println!("{:?} {:?} {:?} {:?}", e, f, g, h);
}

/*
1 1.0 1 Thing { member: "one" }
1 1.0 1 Thing { member: "one×one" }
*/

关于rust - One::one() 与 1 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65339815/

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