将Ruby类加载到应用程序中的最佳方式是什么?
目前我装Ruby类为每个类文件使用需要的命令,例如:将Ruby类加载到应用程序中的最佳方式是什么?
require File.join(File.dirname(__FILE__), 'observation_worker')
require File.join(File.dirname(__FILE__), 'log_worker')
对于每个类我定义它需要的类。如果我可以在我的应用程序的入口处执行此操作,那将是非常好的。
是否有一种简单的方法来在应用程序的开始加载所有的Ruby类?
如果您有您的代码去,你可以指定目录路径添加到负载路径类似
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
稍微清晰的目录结构,那么在你的代码的其他部分,你可能需要从像一个相对路径所以:
require 'observation_worker'
require 'logger_worker'
,或者如果你有LIB中的文件夹,你甚至可以做
require 'workers/observation'
require 'workers/logger'
在我看来,这可能是处理图书馆上下文中最简单的方法。
不知道我完全理解,因为你总是要告诉你的程序哪些文件需要,但你可以这样做:
Dir["#{File.dirname(__FILE__)}/*.rb"].each { |f| require(f) }
,其中将包括来自的目录下的所有文件名为.rb当前文件。 虽然如果你开始使用RDoc,它将不会满意你。
明确列出您的需求通常不是一件坏事,它让其他开发人员清楚地了解您的代码正在发生什么。
正如jtzero评论,自动加载已弃用
您还需要指定哪些加载,但你可以尝试autoload
。
autoload :Module, "module"
当恒定Module
首先使用该文件"module"
将require
自动天。
这是我喜欢使用的选项。
http://github.com/dyoder/autocode/tree/master
从GitHub的文档
require 'autocode'
module Application
include AutoCode
auto_load true, :directories => [ :configurations, :models, :views, :controllers ]
end
这将尝试从给定的目录动态加载代码,使用模块名称来确定哪个看 目录,因此,应用:: CustomerModel可以加载文件models/customer_model.rb。
此外,你可以检查轨道导轨的方式。
供参考[autocode](http://github.com/dyoder/autocode/tree/master)是“此存储库是否稍后将会移除更长时间的使用。请使用wave/autocode存储库。“ – jtzero 2013-07-17 16:31:04
结账此类加载
http://github.com/alexeypetrushin/class_loader
假设你有以下目录结构
/your_app
/lib
/animals
/dog.rb
/zoo.rb
只是点的ClassLoader您的应用程序的根,它会找到并加载所有其他类自动
require 'class_loader'
autoload_dir '/your_app/lib'
Zoo.add Animals::Dog.new # <= all classes loaded automatically
仅供参考,自动加载是[已弃用](https://www.ruby-forum.com/topic/3036681) – jtzero 2013-07-17 16:26:51