Ruby 如何修复循环以返回传递给“with_object”的对象?

Ruby 如何修复循环以返回传递给“with_object”的对象?,ruby,break,Ruby,Break,此脚本持续接受用户的输入,直到他们进入退出,此时循环中断。但是,为什么循环返回nil,而不是用_object传递给的对象呢 puts "enter lines, type exit to finish" loop.with_object([]) do |_,a| i = gets.chomp i == 'exit' ? break : a << i end #=> nil 放入“输入行,键入exit以完成” loop.with_object([])do | u,a

此脚本持续接受用户的输入,直到他们进入
退出
,此时循环中断。但是,为什么循环返回
nil
,而不是用_object传递给
的对象呢

puts "enter lines, type exit to finish"

loop.with_object([]) do |_,a|
  i = gets.chomp
  i == 'exit' ? break : a << i
end
 #=> nil
放入“输入行,键入exit以完成”
loop.with_object([])do | u,a|
i=get.chomp
i==‘退出’?破发:零

根据
枚举器,with#U object
应返回传递给它的对象。

Write
break a
可重新定义
break
的返回值,默认值为
nil

loop.with_object([]) do |_,a|
  i = gets.chomp
  i == 'exit' ? (break a) : a << i
end
 #=> whatever #a is
loop.with_object([])do | u|
i=get.chomp
i==‘退出’?(打断a):a什么都可以

从某种意义上说,
break
用对象的返回值覆盖
,因此您必须再次手动设置它。

同样适用于
inject
/
reduce
next
。您可以改为编写
i==“exit”?(提升停止迭代):a