有没有办法让公共特征具有私人功能?

时间:2016-12-26 04:54:58

标签: module rust private traits

我有一个公共特征的实现,它重复了多个函数的一些工作,所以我想用一个执行共享工作的函数来干掉它,从实际意图使用的函数中调用它。所以我有:

  • fn do_private_thing()
  • fn do_pub_1()
  • fn do_pub_2()

我不希望do_private_thing()在文档中公开或直接使用,因为从特征/实现的用户的角度来看,它没有做任何有用的事情。但公共特征中的功能不是私密的。

我可以在特征实现所在的模块中使do_private_thing成为私有函数,但特征确实需要该特征的任何实现都能完成该函数的工作。所以,如果我将该代码留在实现之外,我觉得我有点撒谎。

在Rust中解决这个问题的合理方法是什么?

1 个答案:

答案 0 :(得分:3)

  

我可以在特征实现所在的模块中使do_private_thing成为私有函数

这就是我要做的。

  

但该特征确实要求该功能的任何实施都能完成该功能。所以,如果我将该代码留在实现之外,我觉得我有点撒谎。

这开始有点不太清楚了。当你说任何特质的实现时,我就不再理解为什么你想把它变成私有的。如果特征的另一个实现者需要这个代码,那么它应该以某种方式公开。

在许多方面,这与问题非常相似"我如何测试私人方法"。我的正常答案是:。而是将要测试的代码提取到新的公共项目,然后单独测试该项目。通常的问题是,人们不想在某个特定的状态上公开功能,而不是他们根本不想公开这些功能。

在这种情况下,创建一个包含共享逻辑的新类型,然后可以由需要它的人公开和使用。或者,创建一个类型,可以通过实现特征的类型进行参数化,并提供您需要的任何额外功能。