【发布时间】:2020-04-28 14:28:41
【问题描述】:
Rust 新手,但仍然有点磕磕绊绊......我制作了下面的函数,它按预期工作。
如果我有n = 18、factors = &[3, 6]等参数,该函数将检查是否有任何“因子”是n的倍数。
fn check_multiple(n: u32, factors: &[u32]) -> bool {
factors.into_iter().filter(|&y| *y != 0).any(|z| n % z == 0)
}
但我试图了解.filter(|&y| *y != 0) 中“y”的引用和“解除引用”是如何工作的。我的理解是“&y”是“y的引用地址”。所以你不应该把它写成filter(|&y| *(&y) != 0)... 来使用“*”获得正确的“取消引用”吗?
【问题讨论】:
-
"我的理解是 "&y" 是 y 的引用地址",是的,你是对的,现在
y包含对 y 值的引用。要获取y的值,您可以取消引用 (*y),以便您可以对“y”进行比较 -
我一般不会在切片上使用
into_iter()。只是iter()做同样的事情并且更常见,所以我会坚持使用它以保持一致性并避免混淆。 -
感谢斯文的提示!
标签: rust