Rust 如何将结构或元组置于迭代程序的状态?
我对生锈很陌生。我试图用代码的出现作为学习它的借口。我目前是一名长生不老药程序员,所以我整天都在使用map/reduce 我正努力用铁锈做同样的事情。我确信我可以放弃迭代器,用Rust 如何将结构或元组置于迭代程序的状态?,rust,Rust,我对生锈很陌生。我试图用代码的出现作为学习它的借口。我目前是一名长生不老药程序员,所以我整天都在使用map/reduce 我正努力用铁锈做同样的事情。我确信我可以放弃迭代器,用for循环轻松地完成它,但我宁愿不这样做 看起来fold与reduce非常相似,但我不知道如何使用比整数更复杂的状态 input .chars() .map(|c| c.to_digit(10).unwrap()) .fold(initial_state, |state, &x| { let Day1{su
for循环
轻松地完成它,但我宁愿不这样做
看起来fold
与reduce
非常相似,但我不知道如何使用比整数更复杂的状态
input
.chars()
.map(|c| c.to_digit(10).unwrap())
.fold(initial_state, |state, &x| {
let Day1{sum: sum, prev: prev} = state;
Some(Day1{
sum: sum,
prev: prev,
});
})
我收到了很多关于不匹配类型的编译器错误
.fold(initial_state, |state, &x| {
^^^^^^^^^^^^^ expected (), found struct `Day1`
let Day1{sum: sum, prev: prev} = state;
^^^^^^^^^^^^^^^^^^^^^^^^^^ expected (), found struct `Day1`
为什么它期望
()
,这没什么(我想)。我很想了解错误,但是如果有更好的方法在循环中维护状态,我也希望得到一些帮助。如果你看看你在做什么,问题就很清楚了。让我解释一下
首先,让生锈的文件保持联系是个好主意。查看那里的方法,您会发现它的特征:
fn fold<B, F>(self, init: B, f: F) -> B where
F: FnMut(B, Self::Item) -> B,
为此:
let Day1 {sum: sum, prev: prev} = state;
Some(Day1 {
sum: sum,
prev: prev,
})
在Rust中(与大多数函数式语言一样),最后一个表达式是返回表达式。在本例中,您没有返回任何内容,但是如果删除分号,您将返回Some(Day1{sum:sum,prev:prev})
表达式,该表达式的类型为选项
修复此问题后,您可能会遇到另一个问题:不匹配的
Day1
和Option
,这将发生,因为您又有不同的类型:initial\u state
类型的Day1
和返回Option
的折叠函数。解决方案是在这些地方使用相同的类型,例如,使类型的选项的处于初始状态
,或者从fold函数返回Day1
对象,这样一切都将编译。同样,与Rust文档保持联系会给您带来一个新的解决方案。请查看如何创建一个新的解决方案。您尚未提供第1天
、输入
或初始状态
的定义。FWIW,您只需执行let Day1{sum,prev}=state
和一些(第1天{sum,prev})
类型第1天
的初始状态
和返回选项
的折叠函数-您如何知道初始状态
的类型?OP没有提供它。@Shepmaster只是从错误消息中得到:>^^^^^^^^^^^^^预期(),找到structDay1
let Day1 {sum: sum, prev: prev} = state;
Some(Day1 {
sum: sum,
prev: prev,
})