@ things.each или 5.times do | t | - PullRequest
       23

@ things.each или 5.times do | t |

5 голосов
/ 21 февраля 2012

Есть ли способ иметь итератор, который выполняет итерацию в любом случае, даже если объект равен нулю?

Например, я хотел бы убрать мои представления из моего приложения и создать фиктивное приложение для дизайнера.

Так что я бы хотел, чтобы он повторялся или зацикливался.

Как это можно сделать?

Я только что нашел способ сделать это

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

Ответы [ 2 ]

5 голосов
/ 21 февраля 2012

Вы должны быть в состоянии использовать что-то вроде этого:

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

Так что это делает, чтобы перебирать пустые вещи, если @things было nil, в противном случае повторяется только по @things.

EDIT

Более краткая версия dummy_things, как упоминал Виктор, будет выглядеть примерно так:

def dummy_things
  (0..4).map{ Thing.new }
end
4 голосов
/ 21 февраля 2012

Ответ только на ваш вопрос, даже если у вас нет объекта, вы можете повторить 5 раз, используя

5.times do |i|
  puts "Dummy page"
end
...