有没有办法在 public 特征中拥有私有函数?
Is there a way to have private functions in public traits?
我有一个 public 特性的实现,它在多个函数上重复一些工作,所以我想用一个函数来干它,它执行共享工作,从函数实际调用意味着被使用。所以我有:
fn do_private_thing()
fn do_pub_1()
fn do_pub_2()
我不希望 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 项目中,然后单独测试该项目。通常的问题是人们不想在特定状态 上公开功能 ,而不是他们根本不想公开功能。
在这种情况下,创建一个包含共享逻辑的新类型,然后可以公开并供需要它的任何人使用。或者,创建一个类型,该类型可以通过实现您的特征的类型进行参数化,并提供您需要的任何额外功能。
我有一个 public 特性的实现,它在多个函数上重复一些工作,所以我想用一个函数来干它,它执行共享工作,从函数实际调用意味着被使用。所以我有:
fn do_private_thing()
fn do_pub_1()
fn do_pub_2()
我不希望 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 项目中,然后单独测试该项目。通常的问题是人们不想在特定状态 上公开功能 ,而不是他们根本不想公开功能。
在这种情况下,创建一个包含共享逻辑的新类型,然后可以公开并供需要它的任何人使用。或者,创建一个类型,该类型可以通过实现您的特征的类型进行参数化,并提供您需要的任何额外功能。