Ruby 模块和扩展 self

标签 ruby module class-method instance-methods

代码在什么情况下:

module M
   extend self
   def greet
    puts "hello"
   end

end

使用比说这样的话更有益:

module M
   def self.greet
    puts "hello"
   end
end

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

最佳答案

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

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

关于Ruby 模块和扩展 self ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3358047/

相关文章:

ruby - `String#sub` 方法在第一次执行时返回不正确的值

php - "PHP Composer"与 "Ruby Gems and Bundler"相比

ruby-on-rails - XP 上的 Ruby on rails msvcrt-ruby191.dll 问题

ruby - 如何在模块定义之外访问 Module.nesting 的返回

自定义 S4 类的 R 绘图方法

ruby - 在类方法中使用 ActiveSupport numberhelper

ruby - 在 ruby​​ 中将 JSON 转换为字符串或哈希

python - 你如何使用 __init__.py?

javascript - Angular 2/4 中关于 BrowserModule 的困惑

objective-c - 如何在不引用类的情况下在 Objective C 中调用 +class 方法?