gpt4 book ai didi

rust - 如何在 Rust 中调用泛型 trait 方法

转载 作者:行者123 更新时间:2023-12-03 11:31:08 24 4
gpt4 key购买 nike

拥有这些相当人为的类型定义

trait Generic<T> {
fn some(&self) -> T;
}

impl<T> Generic<T> for i32
where
T: Default,
{
fn some(&self) -> T {
T::default()
}
}

我要调用 some显式指定类型 T 的方法。下面的代码显然不起作用,因为该方法本身不是通用的。
fn main() {
let int: i32 = 45;
println!( "some: {}", int.some<bool>() );
}

正确的调用方式是什么 some ?

最佳答案

正如您所尝试的那样,您必须指定确切的类型。不幸的是,您的函数不是通用的,而是您的实现是通用的,因此您必须执行以下操作:

fn main() {
let int: i32 = 45;
println!("some: {}", <i32 as Generic<bool>>::some(&int));
// Or,
println!("some: {}", Generic::<bool>::some(&int));
}

或者,您可以定义一个辅助特征:
trait HasSome {
fn other_some<T>(&self) -> T where Self: Generic<T> {
<Self as Generic<T>>::some(self)
}
}
impl<T> HasSome for T {} // Blanket impl.

Playground .

另外,请注意,在指定类型或函数的泛型时,您需要使用“turbofish” ::<>运算符(operator):
let foo = Vec::<i32>::new(); // Vec<i32>
let foo = my_generic_function::<usize>(); // Calls my_generic_function with usize
let foo = Option::<usize>::None;
let foo = None::<usize>;

关于rust - 如何在 Rust 中调用泛型 trait 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475692/

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