如何在实现特征时避免函数名称冲突?

Mar*_*cht 4 private traits rust

我有一个带有实现的结构,该实现具有访问结构的私有状态的函数.

struct Example {...}

impl Example {
    fn test(&self) -> .. {...}
}
Run Code Online (Sandbox Code Playgroud)

在另一个模块中的其他地方存在另一个特征:

trait ExampleTrait {
    fn test(&self) -> .. {...}
}
Run Code Online (Sandbox Code Playgroud)

现在我想实现ExampleTraitExample结构和测试方法转发到测试impl的结构.

以下代码:

impl ExampleTrait for Example {
    fn test(&self) -> .. {
        self.test()
    }
}
Run Code Online (Sandbox Code Playgroud)

显然是一个无限的递归调用.我不能只重复原始测试的主体,因为我无法访问Example此处的私有状态.

有没有其他方法可以做到这一点,除了重命名一个功能或在Example公共场所制作字段?

lje*_*drz 8

您可以使用完全限定语法来消除使用哪种方法的歧义:

impl ExampleTrait for Example {
    fn test(&self) {
        Example::test(self) // no more ambiguity
    }
}
Run Code Online (Sandbox Code Playgroud)