Tag: extend

在Object中的模块中混合会导致所有对象将该模块的实例方法作为单例方法inheritance

当我尝试将自己的行为添加到Object类时,我会得到在将模块混合到用户定义的类时不会发生的不良影响。 module Entity def some_instance_method puts ‘foo’ end def self.secret_class_method puts ‘secret’ end module ClassMethods def some_class_method puts ‘bar’ end end def self.included( other_mod ) other_mod.extend( ClassMethods ) end end 现在,我创建类Bob ,使其包含Entity 。 class Bob; include Entity; end; 这产生了期望和预期的输出: Bob.secret_class_method #=> NoMethodError Bob.some_instance_method #=> NoMethodError Bob.some_class_method #=> bar Bob.new.secret_class_method #=> NoMethodError Bob.new.some_instance_method #=> foo Bob.new.some_class_method […]

Ruby mixins:扩展和包含

我一直在阅读一些关于Ruby的mixin方法, extend和include ,我仍然不太确定这种行为。 我理解, extend会将给定模块的实例方法作为单例方法添加到执行扩展的模块中,并且include将基本上将模块的内容(方法,常量,变量)附加到执行包含的模块中,有效地定义他们在接收器中。 然而,经过一些修补,试图了解行为将如何表现,我有几个问题。 这是我的测试设置: module Baz def blorg puts ‘blorg’ end end module Bar include Baz def blah puts ‘blah’ end end module Foo extend Bar end class Bacon extend Bar end class Egg include Bar end 正如我所料,模块Bar获得了Baz ( #blorg )中定义的实例方法,好像它们由于包含方法而自己定义,而类Bacon获得了单例方法Bacon::blah和Bacon::blorg通过扩展。 Bacon.blah # => blah Bacon.blorg # => blorg 而类Egg获得Bar ( #blah和现在#blorg […]