Vla*_*eev 3 syntax pointers rust
&variable在模式或闭包参数中使用它意味着什么?
for &code in self.exit_code.iter() { ... }
let mut new_seps = do seps.iter().fold(~[]) |result, &next| { ... }
Run Code Online (Sandbox Code Playgroud)
下面我们就&code和&next在for循环和封闭的定义.什么&这些的意思是签?为什么我们不能简单地使用code和next没有&符号?它与ref模式匹配中的限定符有关吗?它与特征实现&中的self参数有关吗?
我在当前的Rust参考手册和教程中都找不到任何关于此语法的内容.目前我认为这是某种隐式解除引用(这是从错误消息中得出的,如果我&在模式中省略的话会出现),但我不确定.
这是一种模式匹配,"解构"某种类型&T.也就是说,在
let &x = &1i;
Run Code Online (Sandbox Code Playgroud)
x有类型int和值1.所以它实际上是相反的ref(它执行@KerrekSB所说的,ref x通过引用而不是值来捕获).
人们可以认为它类似于
match returns_an_option() {
Some(a) => { ... }
None => { ... }
}
Run Code Online (Sandbox Code Playgroud)
除了构造函数&T是&,不是Some或None.
在这个特定的例子中,我猜seps是一个向量(你声明的错误表明它可能是一个&[&str]),所以.iter()返回一个实现的对象Iterator<& &str>,也就是说,它是对vector(&str)元素的引用的迭代器,因此,你需要以next某种方式取消引用以获得原始版本&str.这可以通过&模式匹配(如代码演示)或使用*next它来完成.
(请注意,&模式仅适用于隐式可复制类型,因为无法将所有权从引用/ 借用指针(即&T)中移出.)
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |