为什么这不起作用?
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
时,那只是简单地调用类方法吗?那与KoreanKid.greet
相同吗?为什么上述工作没有?
在我的模块中,我将混合使用类方法和实例方法......如何让它们干净利落地工作?
答案 0 :(得分:1)
scp
将模块中的现有方法添加为类的实例方法。要添加类方法,您必须使用scp $src $dest -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
:
Kernel#include
请注意,我们扩展的方法是原始模块中的实例方法。
两种流行的方法是使用Kernel#extend
钩子来扩展:
module Foo
def bar
42
end
end
class Baz
extend Foo
end
Baz.bar # => 42