gpt4 book ai didi

ruby - 将模块中的特定方法拉入 ruby​​ 中的全局命名空间

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:16 25 4
gpt4 key购买 nike

是否可以通过专门命名函数(也就是不是整个模块)将函数从模块引入到 ruby​​ 中的全局命名空间?

我有一个最初不使用模块的模块,我想将类/方法移动到一个模块中,但仍然保留一个模块,该模块将具有全局级别的所有内容以实现兼容性。到目前为止,我有这个。

# graph.rb
require 'foo_graph'
include foo

# foo_graph.rb
module foo
# contents of the old graph.rb
end

但是模块 foo 也在完全不相关的文件中使用,调用 include 可能会把比我预期的更多的东西拉到全局命名空间中。

有没有一种方法可以让我指定我想使用 include 引入哪些功能,或者是否有其他方法来做我想做的事情?

最佳答案

使用子模块。

module Foo
module Bar
def bar_method; end
end
include Bar

module Baz
def baz_method; end
end
include Baz
end

# only include methods from Bar
include Foo::Bar

bar_method
#=> nil

baz_method
#=> NameError: undefined local variable or method `baz_method' for main:Object

include Foo

# include all methods from Foo and submodules
baz_method
#=> nil

关于ruby - 将模块中的特定方法拉入 ruby​​ 中的全局命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com