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

时间:2018-03-16 11:40:29

标签: rust private traits

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

struct Example {...}

impl Example {
    fn test(&self) -> .. {...}
}

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

trait ExampleTrait {
    fn test(&self) -> .. {...}
}

现在我想为ExampleTrait结构实现Example并将测试方法转发给结构的测试impl

以下代码:

impl ExampleTrait for Example {
    fn test(&self) -> .. {
        self.test()
    }
}

显然是无限递归调用。我不能只重复原始测试的主体,因为我在这里无法访问私有状态Example

除了重命名一个函数或在Example公开中创建字段外,还有其他方法吗?

1 个答案:

答案 0 :(得分:8)

您可以使用fully-qualified syntax来消除使用哪种方法的歧义:

impl ExampleTrait for Example {
    fn test(&self) {
        Example::test(self) // no more ambiguity
    }
}