gpt4 book ai didi

reference - 为什么&Option 上的模式匹配会产生Some(&T)类型的东西?

转载 作者:行者123 更新时间:2023-12-03 11:49:17 25 4
gpt4 key购买 nike

我这里有一个小playground example

fn main() {
let l = Some(3);
match &l {
None => {}
Some(_x) => {} // x is of type &i32
}
}

我在 &Option上进行模式匹配,如果我将 Some(x)用作分支,为什么 x&i32类型?

最佳答案

您要匹配的表达式&l的类型为&Option<i32>,因此,如果严格要求,模式应为&None&Some(x),如果我们使用这些模式,则x的类型确实为i32。如果我们像您在代码中那样在模式中省略了“&”号,则首先看起来这些模式根本无法匹配,并且编译器应引发类似于“expected Option,found reference”的错误,实际上这是Rust版本1.26之前编译器所做的。

当前版本的Rust支持RFC 2005引入的“匹配人体工程学”,并且现在允许在没有&符的情况下将对枚举的引用与模式进行匹配。通常,如果您的match表达式仅是引用,则不能将任何成员移出枚举,因此,将引用与Some(x)进行匹配等同于与模式&Some(ref x)进行匹配,即x成为对内部值的引用。 Option。在您的特定情况下,内部值为i32,即Copy,因此将允许您与&Some(x)匹配并获得i32,但是对于常规类型而言,这是不可能的。

RFC的思想是使正确的模式中的&符号和ref变得更容易,但是我不完全相信新规则是否实际上简化了事情,或者它们是否通过使事情在某些情况下神奇地起作用而增加了困惑案例,从而使人们更难以真正理解底层的逻辑。

关于reference - 为什么&Option <T>上的模式匹配会产生Some(&T)类型的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61026166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com