Ruby模块并扩展自我

joe*_*lis 15 ruby module class-method instance-methods

在什么样的情况下代码:

module M
   extend self
   def greet
    puts "hello"
   end

end
Run Code Online (Sandbox Code Playgroud)

使用更有利于说:

module M
   def self.greet
    puts "hello"
   end
end
Run Code Online (Sandbox Code Playgroud)

在顶部,一个是扩展的实例方法,后者只是一个类方法,但在调用任一方法时,你必须使用M.greet,对吧?我很好奇是否有人可以说明何时使用一个代码而不是另一个代码.谢谢!

hor*_*guy 15

第一个例子通常是人们实现功能的方式module_function(当他们不知道这种方法的存在时).

A module_function既是实例方法又是类方法.在您的第二个代码示例中,该方法只是一个类方法.


Adr*_*ian 10

你可以用你的第一个例子做到这一点,但不是你的第二个例子:

include M
greet
Run Code Online (Sandbox Code Playgroud)