如何将循环修复到 return 传递给 `with_object` 的对象?

How can I fix the loop to return the object passed to `with_object`?

此脚本不断获取用户的输入,直到他们输入 exit,此时循环中断。但是为什么循环 return nil 而不是传递给 with_object 的对象?

puts "enter lines, type exit to finish"

loop.with_object([]) do |_,a|
  i = gets.chomp
  i == 'exit' ? break : a << i
end
 #=> nil

根据official documentation Enumerator#with_object应该return把对象传给它。

写入break a重新定义break的return值,默认为nil.

loop.with_object([]) do |_,a|
  i = gets.chomp
  i == 'exit' ? (break a) : a << i
end
 #=> whatever #a is

在某种意义上 break 覆盖了 with_object 的 return 值,因此您必须再次手动将其设置回来。