参数/模式中'&变量'的含义

时间:2013-09-28 11:25:26

标签: pointers syntax rust

&variable在模式或闭包参数中使用时的含义是什么?

for &code in self.exit_code.iter() { ... }

let mut new_seps = do seps.iter().fold(~[]) |result, &next| { ... }

我们在&code循环和闭包定义中有&nextfor&签到这些意味着什么?为什么我们不能简单地使用codenext,而不使用&符号?它与模式匹配中的ref限定符有关吗?它与特征实现中&参数中的self有关吗?​​

我在current Rust reference manualtutorial中都找不到任何关于此语法的内容。目前我认为这是某种隐式解除引用(这是从错误消息中看出的,如果我在模式中省略&则会出现),但我不确定。

1 个答案:

答案 0 :(得分:6)

这是一种模式匹配,“解构”&T类型的东西。也就是说,

let &x = &1i; 

x的类型为int,值为1.所以它实际上与ref相反(@KerrekSB所说的是ref x通过引用捕获而不是按价值而言。

可以认为它类似于

match returns_an_option() {
    Some(a) => { ... }
    None => { ... }
}

除了&T的构造函数是&,而不是SomeNone


在这个特定的例子中,我猜seps是一个向量(你说的错误表明它可能是&[&str]),所以.iter()返回一个实现{{1}的对象},也就是说,它是对向量元素(Iterator<& &str>)的引用的迭代器,因此,您需要以某种方式取消引用&str以获得原始next。这可以通过&str在模式匹配中完成(如代码所示)&一起使用。

(请注意,*next模式仅适用于隐式可复制类型,因为无法将所有权从引用/ 借用的指针移出(即&)。)< / p>