来自OCaml,很容易创建一个存在于某些公共接口上的类型,但其定义是隐藏的.我正试着在《铁 rust 与失败》中做同样的事情.
我想要的应该是这样的:
mod inner{
pub(super) type MyActualType = ...
}
pub type MyType = inner::MyActualType
trait MyTypeExt{
...
}
impl MyTypeExt for MyType{
...
}
目标是外部只能看到在MyTypeExt
中定义的方法,而不是inner::MyType
中所拥有的所有方法.例如,MyType
可能是我只希望能够在非常受控制的上下文中创建和使用的i32
-我希望a : MyType + b : MyType
是一个编译器错误.(在上面的代码中并非如此.)
我意识到我能做到
pub struct MyType{v : MyActualType} //note the lack of visibility qualifier on v
但我的理解是,除了用一堆包装和展开来拥挤实现的语法之外,这可能会对性能产生影响.我对OCaml版本的理解是,一旦完成可见性/类型判断,该类型将被视为任何其他i32
,不会对性能造成影响.
有办法做到这一点吗?