在Swift中,我可以为具有参数相等约束的泛型类型添加方法。
因此,我认为这段 Rust 代码应该可以工作,但是它出现了一个错误。(
extension Optional where Wrapped == String {
// Available only for `Optional<String>` type.
func sample1() { ... }
}
如何在Rust中实现这个功能?
更新
这个功能被称为带有通用where从句的扩展。
我认为这基本上是与Rust的impl
具有相同的特性,只不过没有明确的trait。
trait OptionUtil {
fn sample1(&self);
}
impl<T> OptionUtil for Option<T> where T:std::fmt::Debug {
fn sample1(&self) {
println!("{:#?}", self);
}
}
等同于(不需要显式 trait)
extension Optional where Wrapped: DebugDescription {
func sample1() {
print("\(self)")
}
}
因此,我认为这段 Rust 代码应该可以工作,但是它出现了一个错误。(
等式约束在 where 子句中还不被支持(参见 #20041)
)impl<T> OptionUtil for Option<T> where T == String {
fn sample1(&self) {
println!("{:#?}", self);
}
}
PartialEq
/Eq
特质相当于Swift中的Equatable
协议。但这不是我在这里询问的内容。 - eonilimpl Foo for Option<String>
,用于某个扩展特性Foo
。@Eonil,由于我们并不都熟悉Swift,你能描述一下这个功能是做什么的吗? - mcarton