所以我最近注意到你在ruby的reduce方法中输入参数的顺序会影响结果。
a = ["1", "2", "3"]
a.reduce {|val, con| val + con}
a = ["123"]
然而
a.reduce {|val, con| con + val}
a = ["321"]
我认为只关系你如何命令| val,con |对,这意味着如果con显示在后一个位置,则每个步骤的结果总是存储在con中。这两个应该产生相同的结果。但显然不是在这里。
任何人都可以提供一些提示吗?谢谢。任何关于如何在Ruby中实现这两种方法的解释都会有很大的帮助。
答案 0 :(得分:1)
打印每一步以查看正在进行的操作。
a = %w{1 2 3}
a.reduce {|memo, obj|
puts "memo is #{memo} and obj is #{obj}"
puts "new memo is #{memo + obj}", "="*23
memo + obj
}
#memo is 1 and obj is 2
#new memo is 12
#=======================
#memo is 12 and obj is 3
#new memo is 123
#=======================
a.reduce {|memo, obj|
puts "memo is #{memo} and obj is #{obj}"
puts "new memo is #{obj + memo}", "="*23
obj + memo
}
#memo is 1 and obj is 2
#new memo is 21
#=======================
#memo is 21 and obj is 3
#new memo is 321
#=======================
答案 1 :(得分:0)
块的第一个参数是备忘录,构建解决方案的对象,后者是"当前项目"你的收藏。因此,在第一个示例中,您将在备忘录之后连接项目,在备忘录之前的第二个示例中。两种方式都是合法的。最后,这取决于你必须做什么。