Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 在锈迹斑斑的情况下,如何;加上「`“展平”;选择<;选项<;T>>;?_Generics_Rust - Fatal编程技术网

Generics 在锈迹斑斑的情况下,如何;加上「`“展平”;选择<;选项<;T>>;?

Generics 在锈迹斑斑的情况下,如何;加上「`“展平”;选择<;选项<;T>>;?,generics,rust,Generics,Rust,如何将flant()方法“添加”到选项,仅当且仅当U是选项,或者更简单地将其添加到选项?天真地说,我试图编写以下内容,但这些内容无法编译: impl Option<Option<T>> { fn flatten(&self) -> Option<T> { match self { None => None, Some(v) => v, }

如何将
flant()
方法“添加”到
选项
,仅当且仅当
U
选项
,或者更简单地将其添加到
选项
?天真地说,我试图编写以下内容,但这些内容无法编译:

impl Option<Option<T>> {
    fn flatten(&self) -> Option<T> {
        match self {
            None => None,
            Some(v) => v,
        }
    }
}

fn main() {
    let x = Some(Some(1));
    let y = x.flatten();
    println!("{:?}", y);
}
impl选项{
fn展平(自我)->选项{
匹配自我{
无=>无,
一些(v)=>v,
}
}
}
fn main(){
设x=Some(Some(1));
设y=x.展平();
println!(“{:?}”,y);
}

由于一致性(如果可以,您如何知道其他人也没有定义称为
扁平化的东西?)的原因,您无法为未定义的类型编写固有的实现(您正在尝试的)

相反,你需要用你想要的方法定义和实现一个特征。在任何需要该方法的地方,都可以使用以下特征:

trait展平{
fn展平(自)->选项;
}
选项的impl展平{
fn展平(自)->选项{
匹配自我{
无=>无,
一些(v)=>v,
}
}
}
fn main(){
设x=Some(Some(1));
设y=x.展平();
println!(“{:?}”,y);
}

还请注意,我将该方法的主题从
&self
更改为
self
:您不能从借阅中移出(特别是不可变的借阅),因此通过引用获取
self
在这里没有真正的意义。

注意,由于rust 1.40有一个
选项的函数。