[英]Ruby gem won't add method to global scope using extend
我正在尝试编写一个Ruby Gem,当require
d时,它将一个函数添加到全局范围。
我遵循了这里的想法: 如何在Ruby中向全局范围添加方法? 但是,它根本不起作用! (无论如何在Ruby 2.4.3上)
这是我的实际源代码 ,但以下内容也总结了我已完成的工作和无效的工作:
# example.rb
module Example
def self.hello()
puts "Hello"
end
end
extend Example
然后
# app.rb
require 'example' # Having built as a gem
hello() #=> `<main>': undefined method `hello' for main:Object (NoMethodError)
我哪里做错了?
塞尔吉奥(Sergio)为我解决了这个问题,尽管我不太了解如何做!
将方法封装在模块中被认为是一种好习惯,这样gem的用户可以根据需要直接使用它们( hello
)或作用域( Example::hello
)。
通过去除self.
该方法只能直接访问。 通过包括self.
它根本不起作用。 但是,通过执行以下操作:
module Example
extend self
def hello
puts "Hello"
end
end
extend Example
...它确实以两种方式起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.