什么是&variable
当它用于模式或闭包参数时意味着什么?
for &code in self.exit_code.iter() { ... }
let mut new_seps = do seps.iter().fold(~[]) |result, &next| { ... }
这里我们有&code
and &next
in for
循环和闭包定义。做什么&
登录这些意味着什么?为什么我们不能简单地使用code
and next
,没有&符号?是否与以下有关ref
模式匹配中的限定符?是否与以下有关&
in self
特质实现中的争论?
我在这个语法中找不到任何内容当前 Rust 参考手册 http://static.rust-lang.org/doc/0.8/rust.html#do-expressions nor in tutorial http://static.rust-lang.org/doc/0.8/tutorial.html。目前我认为这是某种隐式取消引用(这是从错误消息得出的,如果我省略&
在模式中),但我不确定。
这是一个模式匹配,“解构”某种类型的东西&T
。也就是说,在
let &x = &1i;
x
有类型int
,值为 1。所以它实际上与ref
(这就是@KerrekSB所说的,ref x
通过引用而不是通过值捕获)。
可以将其视为类似于
match returns_an_option() {
Some(a) => { ... }
None => { ... }
}
除了构造函数&T
is &
, not Some
or None
.
在这个具体例子中,我猜seps
是一个向量(你所说的错误表明它可能是一个&[&str]
), 所以.iter()
返回一个实现的对象Iterator<& &str>
,也就是说,它是对向量元素的引用的迭代器 (&str
),因此,您需要取消引用next
以某种方式到达原始状态&str
。这可以通过以下方式完成&
在模式匹配中(如代码所示)or with *next
当它被使用时。
(请注意,&
模式仅适用于隐式可复制类型,因为无法将所有权从引用/borrowed指针(即&T
).)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)