检查ruby中是否存在模块

And*_*c ॐ 17 ruby

例如,我正在从cli上传递的参数中动态定义模块名称 Required::Module::#{ARGV.first}

有没有办法检查该模块是否存在?另外,我怎么会在它上面运行方法而不知道它的确切名称?

hor*_*guy 35

使用const_defined?此.

Required::Module.const_defined?(:ModuleName)
Run Code Online (Sandbox Code Playgroud)

返回true或false.

  • 现在可以: `Module.const_define?(:Name)` 返回 true 或 false (2认同)

And*_*imm 14

defined?(Required::Module)
Run Code Online (Sandbox Code Playgroud)

"constant"如果存在nil则给出,如果不存在则给出.

更新:对不起,没有正确阅读您的问题.

defined?(eval("Required::Module::"+string))
Run Code Online (Sandbox Code Playgroud)

应该给你你想要的东西.


Dan*_*ara 10

使用以下const_get方法检查模块是否存在:

begin
    mod = Required::Module::const_get "ModuleName"
    #It exists
rescue NameError
    #Doesn't exist
end
Run Code Online (Sandbox Code Playgroud)

  • 我不认为异常处理是最好的方法,它既缓慢又臃肿(代码方面).请改用`const_defined?`. (9认同)