在Ruby中的模块中创建类级方法
为什么这样不行在Ruby中的模块中创建类级方法,ruby,Ruby,为什么这样不行 module Greeter def self.greet puts "anyang" end end Greeter.greet # => anyang class KoreanKid include Greeter greet end # !> NameError : undefined local variable or method `greet' for KoreanKid:Class KoreanKid.greet # !
module Greeter
def self.greet
puts "anyang"
end
end
Greeter.greet # => anyang
class KoreanKid
include Greeter
greet
end
# !> NameError : undefined local variable or method `greet' for KoreanKid:Class
KoreanKid.greet
# !> NoMethodError : undefined method `greet' for KoreanKid:Class
当我在KoreanKid类内部调用greet
时,这只是简单地调用一个类方法,对吗?这和韩国小孩一样。问候一下,对吗?为什么上述方法不起作用
在我的模块中,我将混合使用类方法和实例方法。。。如何使这两种方法都干净地工作?内核#include
将模块中的现有方法添加为类的实例方法。要添加类方法,必须使用Kernel#extend
:
module Foo
def bar
42
end
end
class Baz
extend Foo
end
Baz.bar # => 42
请注意,我们扩展的方法是原始模块中的实例方法
实现这两种功能的常用方法是使用包含的
模块#
钩子来扩展:
module Foo
def bar
:wut
end
def self.included(target)
target.extend ClassMethods
end
module ClassMethods
def baz
:indeed
end
end
end
class Test
include Foo
end
Test.new.bar # => :wut
Test.baz # => :indeed