在Rust中,将非引用与引用进行模式匹配有什么作用? [英] What does pattern-matching a non-reference against a reference do in Rust?

查看:24
本文介绍了在Rust中,将非引用与引用进行模式匹配有什么作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对具有不包括引用的模式的引用进行模式匹配时会发生什么情况?

以下是使用结构模式的示例:

fn main() {
    struct S(u32);
    let S(x) = &S(2);
    // type of x is `&u32`
}

我对此行为感到惊讶,因为左侧的模式与右侧的数据似乎不匹配,而不像&中的&排列。

看起来是这样的,当RHS是结构引用,而LHS是带有字段模式的结构模式时,字段模式中变量的类型是&F,其中F是字段的类型。

我要找的是:

  • 解释预期行为的引用
  • 对行为的解释,其通用性足以解释除了结构之外,元组和枚举还会发生什么。例如,在 let (x,) = &(2,);中,x的类型为i32(更正&i32)。

我在"铁锈参考"或"铁锈书"中找不到任何有关这方面的内容,但我可能遗漏了它。

推荐答案

在Rust1.26中的";Match人机工程学&Quot;中介绍了您遇到的行为,并在its own RFC中进行了说明。简而言之,当根据非引用模式匹配引用时,默认情况下绑定模式切换为使用ref绑定。

在您的情况下,let S(x) = &S(2)去糖到let &S(ref x) = &S(2)ref的";旧&q;状态在"生锈手册"中很快显示为discussed

对行为的解释,其一般性足以解释除了结构之外,元组和枚举还会发生什么。例如,在let (x,) = &(2,);中,x的类型为i32

这是不正确的-如果您向Rust询问x的类型,它会告诉您它是&i32,正如人们预期的那样:

let (x,) = &(2i32,);
let () = x;
//       ^^   - this expression has type `&i32`

换句话说,适用于结构和枚举的相同绑定模式规则也适用于元组。

这篇关于在Rust中,将非引用与引用进行模式匹配有什么作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆