gpt4 book ai didi

ruby - 在 ruby​​ 中,我怎么知道哪个模块被定义为 'load' 或 'require' 的结果?

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:09 25 4
gpt4 key购买 nike

在 ruby​​ 中,如果我执行“require foo”,有没有办法随后确定 foo.rb 中定义的一个或多个模块的名称?

例如,假设我有一个名为 foo.rb 的 ruby​​ 文件,如下所示:

# foo.rb
module MyModule
def self.summary
"this does something useful"
end
...
end

在另一个脚本中,在我执行“require foo”之后,如何确定我现在有一个名为 MyModule 的模块?

最终我所追求的是能够做这样的事情:

file = someComputedFileName()
require file
puts "summary of #{file}: #{???::summary}

虽然我可以强制自己使模块名称和文件名称相同,但我宁愿不这样做。我想要更自由地制作短文件名但更具表现力的模块名称。但是,我向自己保证每个文件只会定义一个模块(想想:插件)。

最佳答案

我不知道这是否是最好的解决方案,但在我的脑海中,这似乎可行:

all_constants = Object.constants
require 'foo'

foo_constants = Object.constants - all_constants

foo_constants 应该只为您提供由 foo.rb 定义的模块、类或其他常量。

关于ruby - 在 ruby​​ 中,我怎么知道哪个模块被定义为 'load' 或 'require' 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/451347/

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