@ things.each或5.times do | t |

Jos*_*ech 5 ruby iteration

有没有办法让迭代器反正,即使对象是零也是如此?

例如,我想从我的应用程序中删除我的视图,并为设计师创建一个虚拟应用程序.

所以我希望它迭代或循环.

如何才能做到这一点?

我刚刚找到了一种方法

<%
   (@messages.count == 0 ? Array.new(5).map { Message.new } : @messages.each).each do |m|         
%>
Run Code Online (Sandbox Code Playgroud)

Lam*_*bda 5

你应该可以使用这样的东西:

(@things || dummy_things).each do |thing|
  # do something with thing
end

def dummy_things
  dummies = []
  5.times do
    dummies.push(Thing.new)
  end
  dummies
end
Run Code Online (Sandbox Code Playgroud)

所以这样做是为了迭代虚拟事物,如果@thingsnil,否则只是迭代@things.

编辑

dummy_thingsVictor所述,更简洁的版本将是这样的:

def dummy_things
  (0..4).map{ Thing.new }
end
Run Code Online (Sandbox Code Playgroud)