我想调用为type实现的方法&[i32]。我可以通过标记为1的行中所示的类型别名来做到这一点,但是是否可以不必每次都引入类型别名呢?
trait Foo<T> {
fn say_hi(x: T);
}
impl<'a> Foo<i32> for &'a [i32] {
fn say_hi(x: i32) {}
}
type Array<'a> = &'a [i32];
fn main() {
let arr = [1, 2, 3];
Array::say_hi(1);//line 1
&[i32]::say_hi(1);//line 2
}
Run Code Online (Sandbox Code Playgroud)
标记为2的行会产生错误消息:
trait Foo<T> {
fn say_hi(x: T);
}
impl<'a> Foo<i32> for &'a [i32] {
fn say_hi(x: i32) {}
}
type Array<'a> = &'a [i32];
fn main() {
let arr = [1, 2, 3];
Array::say_hi(1);//line 1
&[i32]::say_hi(1);//line 2
}
Run Code Online (Sandbox Code Playgroud)
是否可以将标记为2的行修改为没有编译错误?
使用完全合格的语法:
<&[i32]>::say_hi(1);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,这不是一种方法。方法采用self某种形式。这只是一个关联的功能。如果它是一个方法,则可以像其他任何方法一样调用它:
trait Foo<T> {
fn say_hi(&self, x: T);
}
impl Foo<i32> for [i32] {
fn say_hi(&self, x: i32) {}
}
fn main() {
let arr = [1, 2, 3];
<[i32]>::say_hi(&arr, 1);
arr.say_hi(1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |