pen*_*123 6 generics traits rust
我有一个特征,其中一个函数不self作为参数:
trait MyTrait {
fn function(x: i32) -> i32;
}
struct Dummy;
impl MyTrait for Dummy {
fn function(x: i32) -> i32 {
x * 2
}
}
fn call_method<T: MyTrait>(object: T) {
let x = object.function(2);
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
库的用户需要为任何类型实现特征,通常是空结构.我的一个函数接受一个实现的泛型类型MyTrait.当我尝试function在泛型类型上调用该方法时,它给了我这个错误:
错误:没有为当前范围中的
function类型命名的方法T
我在这个问题的答案中尝试了解决方案,但是我得到了同样的错误.如何在泛型类型上调用静态方法?
当我尝试
function在泛型类型上调用方法时,...
两件事:首先,取决于你想看它的方式,function 不是一种方法.它只是一个恰好存在于特征命名空间(也称为 "关联函数")的函数.
其次,你不是试图调用function该类型,而是在该类型的值上调用它.这是不可能的,因为它不是一种方法; 它没有self参数.
解决方案是实际调用function泛型类型的关联函数,如下所示:
fn call_method<T: MyTrait>(object: T) {
let x = T::function(2);
}
Run Code Online (Sandbox Code Playgroud)
有时,这不够具体.如果您需要更具体,您还可以将上述内容写成:
fn call_method<T: MyTrait>(object: T) {
let x = <T as MyTrait>::function(2);
}
Run Code Online (Sandbox Code Playgroud)
两者在语义上是相同的 ; 只是当你涉及很多特征时,第二个更具体,更有可能解决.
| 归档时间: |
|
| 查看次数: |
1914 次 |
| 最近记录: |