gpt4 book ai didi

pointers - 参数/模式中 '&variable' 的含义

转载 作者:行者123 更新时间:2023-11-29 07:57:06 24 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

let &x = &1i; 

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

可以认为它类似于

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

&T的构造函数除外是& , 不是 SomeNone .


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

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

关于pointers - 参数/模式中 '&variable' 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19066402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com