Есть ли более простой способ? - PullRequest
3 голосов
/ 02 января 2011
class Store
  def check_inventory
    @inventory ||= []
    @inventory.each { ... }
  end
end

Можно ли превратить строки с переменными экземпляра в одну строку?

Ответы [ 2 ]

12 голосов
/ 02 января 2011

Да !! В Ruby всегда есть крутой взлом!


class Store
  def check_inventory
    @inventory.to_a.each { ... }
  end
end

Причина, по которой это работает, заключается в том, что Cool Ruby Feature номер 9,123: NilClass реализует метод #to_a, который возвращает []! Как это круто?!

edtq ross$ irb --prompt-mode simple
>> nil.to_a
=> []
>> @this_does_not_exist.to_a
=> []
4 голосов
/ 02 января 2011

Ответ DigitalRoss равен почти так же, но он никогда не изменится @inventory;Ваш код гарантирует, что @inventory всегда является массивом.Если вам нужно такое поведение, вы можете просто объединить две строки:

class Store
  def check_inventory
    (@inventory ||= []).each { ... }
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...