以下代码:
a = "h", "e", "l", "l", "o"
r = a.reduce(){|a, e|
puts "a class: " + a.class.to_s;
a + e;
puts "a: " + a.to_s()
puts "e: " + e.to_s
}
产生以下输出:
a class: String
a: h
e: e
a class: NilClass
undefined method `+' for nil:NilClass
(repl):5:in `block in <main>'
(repl):3:in `each'
(repl):3:in `reduce'
(repl):3:in `<main>'
但是当我在没有puts
调用的情况下运行代码时,运行正常。有人可以就此问题提供澄清吗?
答案 0 :(得分:4)
如果您稍微更改了代码(例如以下内容),问题就解决了:
a = "h", "e", "l", "l", "o"
r = a.reduce{|a, e|
puts "a class: " + a.class.to_s
puts "a: " + a.to_s
puts "e: " + e.to_s
a + e
}
原因是您传递给reduce
的块(即{}
中的代码)评估为nil
,因为最后一个语句puts
返回nil
}。
使用上面的固定代码,块会评估(“返回”)最后一个语句a + e
的结果,这可能是你想要减少字符数组的结果。