Метаданные методы экземпляра - что-то не так с синтаксисом? - PullRequest
0 голосов
/ 06 февраля 2011
NAMES = ['orange', 'pear']

  Fruit.class_eval do
    NAMES.each do |n|
        define_method "is_#{n}?" do
          self.name == Fruit.find_by_name(n)
        end
    end
  end

Для фруктового объекта я хочу иметь возможность явно спросить, является ли он апельсином или нет, например, по атрибуту имени фруктового объекта. Когда я вызываю Fruit.find_by_name ('orange'). Is_orange? Я получаю ложь. Что я делаю не так?

1 Ответ

1 голос
/ 06 февраля 2011
self.name == Fruit.find_by_name(n)

мне кажется неправильным.Разве вы не должны проверять

self.name == n

??

И вы действительно должны использовать instance_eval.

Кроме того, я думаю, что было бы более рубиновым, если назвать ваш метод оранжевым?вместо is_orange?.

...