繁体   English   中英

Ruby gem不会使用扩展将方法添加到全局范围

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM