面试题答案
一键面试必须使用完全限定语法的场景
- 消除方法调用的歧义:当结构体或类型可能实现了多个trait,且这些trait包含同名方法时,使用完全限定语法可以明确指定调用哪个trait的方法。例如,一个类型同时实现了
FromStr
和自定义的MyFromStr
trait,且都有from_str
方法,此时就需要完全限定语法来明确调用。 - 在trait内部调用其他trait方法:当一个trait方法需要调用另一个trait的方法时,如果存在潜在歧义,需使用完全限定语法。
- 在泛型代码中调用特定trait方法:在泛型函数或结构体中,由于类型的不确定性,为确保调用正确的trait方法,可能需要使用完全限定语法。
完全限定语法示例
假设有如下代码:
trait Animal {
fn speak(&self);
}
struct Dog;
impl Animal for Dog {
fn speak(&self) {
println!("Woof!");
}
}
使用完全限定语法调用speak
方法:
fn main() {
let dog = Dog;
<Dog as Animal>::speak(&dog);
}
在上述示例中,<Dog as Animal>::speak(&dog)
就是使用完全限定语法调用Dog
类型实现于Animal
trait的speak
方法。