我一直在寻找类似Python的while/else结构体来改进我的代码.
这意味着循环被执行,如果循环中的条件在任何时候都不是真的,那么它返回else语句中的值.
在红宝石中,我可以这样做:
if @items.empty?
"Empty"
else
@items.each do |item|
item
end
end
Run Code Online (Sandbox Code Playgroud)
那么有没有办法改善这个?
先感谢您.
sco*_*ein 25
请记住,迭代器块会返回您放入其中的内容,可以对其进行测试以供进一步使用.
if arr.each do |item|
item.some_action(some_arg)
end.empty?
else_condition_here
end
Run Code Online (Sandbox Code Playgroud)
嗯,你可以把它写成三元:
@items.empty? ? 'Empty' : @items.each { |item| item }
Run Code Online (Sandbox Code Playgroud)
不过,您可能想在块中做一些更有用的事情,因为each它的副作用是执行并返回原始接收者。
根据您的评论更新:我想您能得到的最接近的结果是
unless @items.empty?
@items.each { |item| p item }
else
'Empty'
end
Run Code Online (Sandbox Code Playgroud)