在类/模块中加载外部文件

saw*_*awa 6 ruby load module class

我有一个外部文件:path_to_external_file.rb有一些类定义:

class A
  some_definitions
end
Run Code Online (Sandbox Code Playgroud)

我想在模块中加载它,B以便A可以将上面定义的类称为B::A.我试过了:

class B
  load('path_to_external_file.rb')
end
Run Code Online (Sandbox Code Playgroud)

但是A在主要环境中定义,而不是在B:

A #=> A
B.constants # => []
Run Code Online (Sandbox Code Playgroud)

如何在某个类/模块中加载外部文件?

编辑 我应该将外部文件作为字符串读取,并在其中评估它们Class.new{...},并include在该类中B

J-_*_*_-L 4

你不能。至少使用loador require,Ruby 文件将始终在顶级上下文中进行评估。

您可以通过两种方式解决该问题:

  • 直接定义class B::A(但你可能试图避免这种情况)
  • 在班级eval(File.read("path_to_external_file.rb"))内使用B

编辑:也许,这个库对你来说很有趣:https ://github.com/dreamcat4/script/blob/master/intro.txt