繁体   English   中英

为什么fold方法给出实际元素而不是引用?

[英]Why does the fold method give the actual element instead of a reference?

根据rust的迭代器 ,有像findfold这样的消费者。

它们用作:

let greater_than_forty_two = (0..100).find(|x| *x > 42);

let sum = (1..4).fold(0, |sum, x| sum + x);

在两种情况下, x均为当前值。 但是,在第一种情况下, x是参考,在第二种情况下, x是元素本身。

据我从for循环了解,它必须是避免所有者问题的参考。 但是折叠情况下不应该存在相同的所有者问题吗?

由于整数是Copy ,因此使用整数很难解释这个问题,因此请比较一下:

let v = vec!["a".to_string(), "b".to_string()];
let result = v.into_iter().find(|s| s.starts_with("b"));
result == Some("b".to_string())

let v = vec!["a".to_string(), "b".to_string()];
let result = v.into_iter().fold("".to_string(), |a, s| s + &a);
result == "ba".to_string()

在第一种情况下,需要将String返回给调用方,因此我们无法让闭包销毁它(如果按值传递它会发生这种情况)。 在第二种方法中,在调用闭包之后不再使用这些值,因此可以通过值将它们传递给闭包(这允许我们在附加到String时使用它)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM