我有一个公共特征的实现,它重复了多个函数的一些工作,所以我想用一个执行共享工作的函数来干掉它,从实际意图使用的函数中调用它。所以我有:
fn do_private_thing()
fn do_pub_1()
fn do_pub_2()
我不希望do_private_thing()
在文档中公开或直接使用,因为从特征/实现的用户的角度来看,它没有做任何有用的事情。但公共特征中的功能不是私密的。
我可以在特征实现所在的模块中使do_private_thing
成为私有函数,但特征确实需要该特征的任何实现都能完成该函数的工作。所以,如果我将该代码留在实现之外,我觉得我有点撒谎。
在Rust中解决这个问题的合理方法是什么?
答案 0 :(得分:3)
我可以在特征实现所在的模块中使
do_private_thing
成为私有函数
这就是我要做的。
但该特征确实要求该功能的任何实施都能完成该功能。所以,如果我将该代码留在实现之外,我觉得我有点撒谎。
这开始有点不太清楚了。当你说任何特质的实现时,我就不再理解为什么你想把它变成私有的。如果特征的另一个实现者需要这个代码,那么它应该以某种方式公开。
在许多方面,这与问题非常相似"我如何测试私人方法"。我的正常答案是:不。而是将要测试的代码提取到新的公共项目,然后单独测试该项目。通常的问题是,人们不想在某个特定的状态上公开功能,而不是他们根本不想公开这些功能。
在这种情况下,创建一个包含共享逻辑的新类型,然后可以由需要它的人公开和使用。或者,创建一个类型,可以通过实现特征的类型进行参数化,并提供您需要的任何额外功能。