base.extend与base.class_eval扩展

时间:2009-11-10 20:08:06

标签: ruby

此语法在功能上是否等效

  def self.included(base)
    base.class_eval do
      extend ClassMethods
    end
  end

到此?

  def self.included(base)
    base.extend ClassMethods
  end

1 个答案:

答案 0 :(得分:8)

唯一相关的区别是只有类响应“class_eval”,而类和实例都响应“extend”。

如果您不打算将方法与对象实例一起使用,那么它们是等效的,尽管第二个实现可用于将实例方法添加到特定实例,而第一个实现方法则不能。