我已将一组.rb文件放在一个目录中modules/。每个文件都包含一个模块。我正在从一个单独的脚本加载所有这些文件:
Dir["modules/*.rb"].each {|file| load file }
Run Code Online (Sandbox Code Playgroud)
但接下来我必须将它们一一包含在内,明确列出并命名它们:
class Foo
include ModuleA
include ModuleB
# ... and so on.
end
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一些非显式的单行代码可以完成此任务,la(伪代码)......
class Foo
for each loaded file
include the module(s) within that file
end
# ... other stuff.
end
Run Code Online (Sandbox Code Playgroud)
我考虑过实际读取文件的内容,搜索字符串“ module”,然后提取模块名称,并以某种方式include基于此进行操作 - 但这似乎很荒谬。
我正在尝试做的事情是可取的和/或可能的吗?
您可以在每个文件中手动定义一些变量,然后在包含该文件时检查其值。
例如,module1.rb:
export = ["MyModule"]
module MyModule
end
Run Code Online (Sandbox Code Playgroud)
第二个module2.rb:
export = ["AnotherModule", "ThirdModule"]
module AnotherModule
end
module ThirdModule
end
Run Code Online (Sandbox Code Playgroud)
然后将它们全部包含在您的文件中(只是想法,它可能无法正常工作):
class Foo
Dir["modules/*.rb"].each do |file|
load file
if export != nil
export.each do { |m| include(Kernel.const_get(m))
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |