0

这段代码来自 Rails Crash Course 书:

class Accessor
  def self.accessor(attr)
    class_eval "
      def #{attr}
        @#{attr}
      end

      def #{attr}=(val)
        @#{attr} = val
      end
    "
  end
end

这个想法是,一个子类Accessor可以通过调用accessor具有我们希望为其生成 getter 和 setter 方法的属性名称的方法来创建 getter 和 setter 方法:

class Element < Accessor
  accessor :name
...

但是,为什么要使用selfin def self.accessor(attr)

4

1 回答 1

3

因为你想为一个类的所有实例定义访问器;您不想为某些实例定义它们,也不想为其他实例定义它们。因此,定义访问器是您想要针对类而不是实例执行的操作;因此accessor必须是类方法,而不是实例方法。使用时会在类体中调用。

于 2015-03-06T11:48:01.460 回答