假设我有一个库中包含以下的特性:
问题在于,由于库中的
据我所知,特质的所有方法都是公开的,那么我该如何重新设计解决这个问题呢?
pub trait Foo {
fn public_op(&self);
fn internal_op(&self);
}
然后,这个特性被实现于此库中的一些结构体中:
pub struct One {}
impl Foo for One {
fn public_op(&self) {}
fn internal_op(&self) {}
}
pub struct Two {}
impl Foo for Two {
fn public_op(&self) {}
fn internal_op(&self) {}
}
这个库中有一个公共函数可以接收特性类型:
pub fn process(obj: &dyn Foo) {
obj.public_op();
obj.internal_op();
}
问题在于,由于库中的
Foo
特质是公开的,因此方法internal_op
也是公开的...但实际上它应该具有pub(crate)
可见性,因为它必须仅在库内部使用。据我所知,特质的所有方法都是公开的,那么我该如何重新设计解决这个问题呢?
public_op
和internal_op
之间的关系是什么--一个是通过另一个实现的吗?例如,某人是否可以仅通过实现public_op
来为外部类型实现Foo
?或者Foo
根本无法在外部实现? - trentpublic_op
和internal_op
之间没有关系,除了传递给process
的对象必须同时实现两者。 - rodrigocfd