当在模式或闭包参数中使用
这里我们在for循环和闭包定义中使用了
我在当前Rust参考手册和教程中都没有找到关于这种语法的任何信息。目前我认为这是某种隐式解引用(如果我在模式中省略
&variable
时,它代表什么意思?for &code in self.exit_code.iter() { ... }
let mut new_seps = do seps.iter().fold(~[]) |result, &next| { ... }
这里我们在for循环和闭包定义中使用了
&code
和&next
。这些中的&
符号是什么意思?为什么不能简单地使用code
和next
,不带上&符号?这是否与模式匹配中的ref
限定符有关?这是否与特质实现中的self参数中的&
有关?我在当前Rust参考手册和教程中都没有找到关于这种语法的任何信息。目前我认为这是某种隐式解引用(如果我在模式中省略
&
,则会出现错误消息),但我不确定。
&
会导致相当神秘的消息。尽管我的例子可能有点复杂... - Vladimir Matveev*
解引用(虽然有自动解引用的情况,比如数组下标);所以如果你尝试省略*
并且它确实是通过借用指针传递的,你应该会看到相应的错误。(当我在一台带有 Rust 编译器的机器上时,我可以自己尝试一下。) - Kerrek SBnext
:if next == "\\s" { ... }
,省略&
会出现error: mismatched types: expected
&&strbut found
&'static str(expected &-ptr but found &'static str)
。如果加上&
就没问题了。看来在使用静态生命周期时会出现问题……我稍后再检查一下。 - Vladimir Matveev