【发布时间】:2020-08-15 21:20:01
【问题描述】:
背景
给定一个枚举变体类型(不可复制):
enum AstNode {
Op(Func, Box<AstNode>, Box<AstNode>),
Val(f64),
// others...
}
尝试对两个这样的向量运行操作:
fn apply_func_iterative(func: Func, lhs: Vec<AstNode>, rhs: Vec<AstNode>) -> Vec<AstNode> {
lhs.iter().zip(rhs).map(|(&l,r)| apply_func(func,l,r)).collect() // l and r are declared differently!
}
fn apply_func(func: Func, lhs: AstNode, rhs: AstNode) -> AstNode {
// magic happens here!
}
在闭包中,lhs 元素采用 l: &AstNode 类型,而压缩后的 rhs 元素采用 l: AstNode 类型。 (注意闭包元组中的不同声明)。
问题
为什么会这样?
有没有办法通过值而不是引用来迭代向量的元素? 从观察到的压缩元素的行为来看,这似乎是可能的。
(在这个例子中,这种差异导致语法声明有点奇怪,但在实践中,我在将引用变量传递给函数时遇到了借用检查器)
免责声明:我对 Rust 还很陌生
【问题讨论】: