有没有办法在 public 特征中拥有私有函数?

Is there a way to have private functions in public traits?

我有一个 public 特性的实现,它在多个函数上重复一些工作,所以我想用一个函数来干它,它执行共享工作,从函数实际调用意味着被使用。所以我有:

我不希望 do_private_thing() 暴露在文档中或直接使用,因为从 trait/implementation 用户的角度来看,它没有做任何有用的事情。但是 public 特征中的函数不是私有的。

我可以在 trait 实现所在的模块中将 do_private_thing 设为私有函数,但 trait 确实要求该函数的工作由 trait 的任何实现来完成。因此,如果我将该代码排除在实施之外,我觉得我有点撒谎。

用 Rust 进行布局的合理方式是什么?

I could make do_private_thing a private function in the module where the trait implementation is located

这就是我要做的。

but the trait does require that that function's work be done by any implementation of the trait. So I feel like I'm lying a little bit if I leave that code out of the implementation.

这开始不太清楚了。当你说 特征的任何实现 时,我不再理解你为什么要将其设为私有。如果特征的另一个实现者需要这段代码,那么它应该是 public 以某种方式。

在很多方面,这感觉与问题 "how do I test private methods" 非常相似。我的正常回答是:不要。相反,将要测试的代码提取到新的 public 项目中,然后单独测试该项目。通常的问题是人们不想在特定状态 上公开功能 ,而不是他们根本不想公开功能。

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