gpt4 book ai didi

rust - 是否存在显式类型归属比使用 turbofish 运算符更简洁的情况?

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

Another question 展示了两种可以在另一个表达式中强制返回 rand::random 类型的方法。这两种方式是:使用类型归属

println!("{}", rand::random(): f64);

或者使用turbofish操作符

println!("{}", rand::<f64>random() );

这些告诉编译器不同的事情,在这种情况下它们的结果是一样的,但一般情况下是不同的。第一个是说返回类型是 f64 并让编译器从中推断出用于类型参数的类型,而第二个是显式指定泛型类型参数。

在这种情况下,差异很小,但在某些情况下

I) 如果没有 turbofish 或类型归属之一,编译器将无法推断出类型,并且

II)类型归属形式比涡轮鱼形式简洁得多?

最佳答案

如果一个函数有多个泛型类型,并且除了输出类型之外都可以从输入中推导出来,那么你仍然需要使用 _ 作为涡轮鱼符号中推导的类型参数,但不是类型归属:

fn add_and_convert<T, U, V>(u: U, v: V) -> T
where U: Add<V>, T: From<<U as Add<V>>::Output> {
T::from(u + v)
}

println!("{}", add_and_convert(1u8, 3u8): i32);
println!("{}", add_and_convert::<i32, _, _>(1u8, 3u8));
// println!("{}", add_and_convert::<i32>(1u8, 3u8)); // won't compile

关于rust - 是否存在显式类型归属比使用 turbofish 运算符更简洁的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61948034/

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