在Ruby中的模块中创建类级方法

时间:2017-03-21 14:51:01

标签: 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

# !> NoMethodError : undefined method `greet' for KoreanKid:Class

当我在KoreanKid类中调用greet时,那只是简单地调用类方法吗?那与KoreanKid.greet相同吗?为什么上述工作没有?

在我的模块中,我将混合使用类方法和实例方法......如何让它们干净利落地工作?

1 个答案:

答案 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