为什么我无法从模块调用 parent-class 方法?
Why am I not able to call a parent-class method from module?
这是我的 code:
module RubyEditExtComponent
def eventExt
watchExt "banana"
end
end
class RubyEditExt
def self.watchExt(value)
puts value
end
include RubyEditExtComponent
end
RubyEditExt.new.eventExt
我想调用一个特定的(父)class 方法来输出我将传递给它的值。但它说 undefined method watchExt
。
我哪里错了?
watchExt
是从实例方法中调用的,因此它本身应该是一个实例方法:
class RubyEditExt
def watchExt(value) # NO self
puts value
end
...
end
或者它应该被称为 class 方法:
module RubyEditExtComponent
def eventExt
self.class.watchExt "banana"
end
end
可能是,您正在尝试做的是使用模块 RubyEditExtComponent
中的功能扩展您的 class RubyEditExt
。这与继承无关(ChildClass < ParentClass)。通常你这样做是为了模块化功能,这让你的 classes 保持干净并且模块可以重用。这样的模块称为mixins。
参见下面的示例。通过这种方式,您可以使用实例方法扩展 class,您可以为 class 的每个对象调用这些方法,或者为 class 定义包含模块的 class 方法。
module RubyEditExtComponent
def self.included(klass)
klass.instance_eval do
include InstanceMethods
extend ClassMethods
end
end
module InstanceMethods
def eventExt
watchExt "banana"
end
end
module ClassMethods
def eventExt2
self.new.watchExt "banana"
end
end
end
class RubyEditExt
include RubyEditExtComponent
def watchExt(value)
puts value
end
end
方法self.included
在包含模块(include RubyEditExtComponent
) 时调用,它接收包含它的class。现在您可以为 class:
的对象调用实例方法
RubyEditExt.new.eventExt
banana
=> nil
或者你调用class方法。在这个方法中,我创建了一个包含模块 (self == RubyEditExt
) 的 class 的实例 (self.new
),然后我为它调用实例方法 watchExt
。
RubyEditExt.eventExt2
banana
=> nil
这是我的 code:
module RubyEditExtComponent
def eventExt
watchExt "banana"
end
end
class RubyEditExt
def self.watchExt(value)
puts value
end
include RubyEditExtComponent
end
RubyEditExt.new.eventExt
我想调用一个特定的(父)class 方法来输出我将传递给它的值。但它说 undefined method watchExt
。
我哪里错了?
watchExt
是从实例方法中调用的,因此它本身应该是一个实例方法:
class RubyEditExt
def watchExt(value) # NO self
puts value
end
...
end
或者它应该被称为 class 方法:
module RubyEditExtComponent
def eventExt
self.class.watchExt "banana"
end
end
可能是,您正在尝试做的是使用模块 RubyEditExtComponent
中的功能扩展您的 class RubyEditExt
。这与继承无关(ChildClass < ParentClass)。通常你这样做是为了模块化功能,这让你的 classes 保持干净并且模块可以重用。这样的模块称为mixins。
参见下面的示例。通过这种方式,您可以使用实例方法扩展 class,您可以为 class 的每个对象调用这些方法,或者为 class 定义包含模块的 class 方法。
module RubyEditExtComponent
def self.included(klass)
klass.instance_eval do
include InstanceMethods
extend ClassMethods
end
end
module InstanceMethods
def eventExt
watchExt "banana"
end
end
module ClassMethods
def eventExt2
self.new.watchExt "banana"
end
end
end
class RubyEditExt
include RubyEditExtComponent
def watchExt(value)
puts value
end
end
方法self.included
在包含模块(include RubyEditExtComponent
) 时调用,它接收包含它的class。现在您可以为 class:
RubyEditExt.new.eventExt
banana
=> nil
或者你调用class方法。在这个方法中,我创建了一个包含模块 (self == RubyEditExt
) 的 class 的实例 (self.new
),然后我为它调用实例方法 watchExt
。
RubyEditExt.eventExt2
banana
=> nil