base.extend与base.class_eval扩展

Bry*_*cke 9 ruby

这种语法在功能上是否等效

  def self.included(base)
    base.class_eval do
      extend ClassMethods
    end
  end
Run Code Online (Sandbox Code Playgroud)

这个?

  def self.included(base)
    base.extend ClassMethods
  end
Run Code Online (Sandbox Code Playgroud)

小智 8

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

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