Rust等价于具有相同泛型参数约束的Swift扩展方法?

Rust等价于具有相同泛型参数约束的Swift扩展方法?,rust,extension-methods,generic-constraints,Rust,Extension Methods,Generic Constraints,在Swift中,我可以将方法添加到具有参数相等约束的泛型类型中 extension Optional where Wrapped == String { // Available only for `Optional<String>` type. func sample1() { ... } } 等同于(没有明确的特征) extension可选,包装位置:DebugDescription{ func样本1(){ 打印(“\(自我)”) } } 因此,我认为这个锈迹

在Swift中,我可以将方法添加到具有参数相等约束的泛型类型中

extension Optional where Wrapped == String {
    // Available only for `Optional<String>` type.
    func sample1() { ... }
}
等同于(没有明确的特征)

extension可选,包装位置:DebugDescription{
func样本1(){
打印(“\(自我)”)
}
}
因此,我认为这个锈迹代码可以工作,但它不会出现错误。(
where子句中尚不支持相等约束(请参见#20041)

impl Option直到选项,其中T==String{
fn样本1(&self){
println!(“{:?}”,self);
}
}

您只需实现具体类型的trait
选项

impl Option直到选项{
fn样本1(自我:&自我){
println!(“{:?}”,self);
}
}
我写了板条箱,它可以让你写一些看起来更像你的Swift例子的东西。但它与实现trait for
选项
相同:

使用type_eq::{constraint,TypeEq};
使用std::fmt::Debug;
性状选择体{
fn样本1(和自身);
}
impl Option直到选择
哪里
约束:typeq,
T:调试,
{
fn样本1(&self){
println!(“{:?}”,self);
}
}
fn main(){
让s=Some(字符串::from(“hello”);
println!(“{:?}”,s);
}

实际上,这种板条箱有用的情况很少。大多数情况下,上面的简单代码会起作用,并且是首选。

和@Stargateur我认为
PartialEq
/
Eq
trait相当于Swift中的
equalable
协议。这不是我要问的。哦,你想要什么?他想要吗?我想他只是想要
impl-Foo作为选项
作为一些扩展特性
Foo
@伊奥尼尔,既然不是所有人都熟悉Swift,你能描述一下这个功能是做什么的吗?@mcarton我想你说的就是我想要的。正如我所预料的那样。谢谢你能把你的评论转换成答案吗?顺便说一句,我更新了我的问题。
use type_eq::{Constrain, TypeEq};
use std::fmt::Debug;

trait OptionUtil {
    fn sample1(&self);
}

impl<T> OptionUtil for Option<T>
where
    Constrain: TypeEq<T, String>,
    T: Debug,
{
    fn sample1(&self) {
        println!("{:#?}", self);
    }
}

fn main() {
    let s = Some(String::from("hello"));
    println!("{:?}", s);
}