【发布时间】:2015-09-14 03:00:24
【问题描述】:
我正在 Rust 稳定版(截至目前,版本 1.2)中定义一个 crate API,并且对定义我自己的类字符串类型的最佳实践感到困惑。
例如,我有一个包装字符串的Foo 类型。
pub struct Foo(String);
我的 API 隐藏了 Foo 实例的构造,此外,由于元组字段是私有的,应用程序不会错误地为自己构造一个无效的 Foo 值。这意味着我的 API 将应用程序限制为仅使用有效的 Foo 值。到目前为止一切顺利。
但是,我希望应用程序能够像使用字符串一样使用 Foo 实例——例如,打印、记录、写入文件、将其传递给接受 @ 的第三方 crate 987654327@,通过to_string() 构造副本并改变副本等。简而言之,我希望应用程序能够“抛弃”Foo-ness 并使用对底层字符串的引用。由于应用程序无法将原始字符串转换回 Foo 实例,因此保留了类型安全性。
我的问题是:如果有的话,我的 crate 应该为 Foo 实现哪些转换特征,以允许应用程序“抛弃”Foo-ness 并将底层字符串作为原始字符串处理?将Foo 转换为&str 非常重要,以避免对底层字符串进行任何不必要的复制。
例如,怎么样?
impl AsRef<str> for Foo
这是正确的做法吗?成语就够了吗?我还应该考虑为Foo 实施其他转换特征吗?
【问题讨论】:
标签: rust