6

&variable当它用于模式或闭包参数时是什么意思?

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

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

这里我们有&codeand &nextinfor循环和闭包定义。&登录这些是什么意思?为什么我们不能简单地使用codeand next,而不使用 & 符号?它与ref模式匹配中的限定符有关吗?它与特征实现&中的self参数有关吗?

我在当前的 Rust 参考手册教程中都找不到有关此语法的任何内容。目前我认为这是某种隐式取消引用(这来自如果我&在模式中省略会出现的错误消息),但我不确定。

4

1 回答 1

9

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

let &x = &1i; 

x具有 typeint和 value 1。所以它实际上与ref(@KerrekSB 所说的,ref x通过引用而不是通过值捕获)相反。

可以将其视为类似于

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

除了&Tis &、 notSome或的构造函数None


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

(请注意,这些&模式仅适用于隐式可复制类型,因为无法将所有权从引用/借用指针(即&T)中移出。)

于 2013-09-28T14:17:07.423 回答