Ruby的等价于Python的for/else

Cyd*_*ia7 10 ruby

我一直在寻找类似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)

  • 这非常棒. (3认同)

Mic*_*ohl 3

嗯,你可以把它写成三元:

@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)