我一直在寻找类似Python的while / else结构体来改进我的代码。
这意味着循环被执行,如果循环中的条件在任何时候都不是真的,那么它返回else语句中的值。
在红宝石中,我可以这样做:
if @items.empty?
"Empty"
else
@items.each do |item|
item
end
end
那么有没有办法改善这个?
提前谢谢。
答案 0 :(得分:25)
请记住,迭代器块会返回您放入的内容,可以对其进行测试以供进一步使用。
if arr.each do |item|
item.some_action(some_arg)
end.empty?
else_condition_here
end
答案 1 :(得分:3)
嗯,你可以把它写成三元:
@items.empty? ? 'Empty' : @items.each { |item| item }
您可能希望在您的块中执行更有用的操作,因为each
执行其副作用并返回原始接收器。
根据你的评论更新:我猜你最接近的就像是
unless @items.empty?
@items.each { |item| p item }
else
'Empty'
end
答案 2 :(得分:0)
或多或少的功能方式:
empty_action = { true => proc{ "Empty"},
false => proc{ |arr| arr.each { |item| item }} }
empty_action[@items.empty?][@items]