元编程实例方法 - 语法有问题吗?

时间:2011-02-06 15:25:46

标签: ruby-on-rails ruby metaprogramming

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

对于水果对象,我希望能够明确地询问它是否为橙色,例如,水果对象的name属性。当我调用Fruit.find_by_name('orange')。is_orange?我弄错了。我做错了什么?

1 个答案:

答案 0 :(得分:1)

self.name == Fruit.find_by_name(n)

对我来说似乎不对。你不应该检查

self.name == n

...

你确实应该使用instance_eval。

另外,我认为将你的方法命名为橙色会更像红宝石吗?而不是is_orange?。