只是让我了解Ruby元编程。 mixin/模块总是设法使我感到困惑。

  • 包括:将指定的模块方法混合为目标类
  • 中的实例方法
  • 扩展:将指定的模块方法混合为目标类
  • 中的类方法

    那么主要的区别就是这样吗?还是更大的潜伏者呢?
    例如
    module ReusableModule
      def module_method
        puts "Module Method: Hi there!"
      end
    end
    
    class ClassThatIncludes
      include ReusableModule
    end
    class ClassThatExtends
      extend ReusableModule
    end
    
    puts "Include"
    ClassThatIncludes.new.module_method       # "Module Method: Hi there!"
    puts "Extend"
    ClassThatExtends.module_method            # "Module Method: Hi there!"
    

    最佳答案

    你说的是对的。但是,还有更多的东西。

    如果您有一个Klazz类和Mod模块,则在Mod中包含Klazz可使Klazz实例访问Mod的方法。或者,您可以使用Klazz扩展Mod,从而使Klazz类可以访问Mod的方法。但是您也可以使用o.extend Mod扩展任意对象。在这种情况下,即使所有其他对象与Mod具有相同的类,单个对象也将获得o的方法。

    10-04 21:40