ruby - 只加载 Ruby 中正在使用的类?

标签 ruby class require ruby-1.9.3

如果我加载x.rbthen all the classes in that file are loaded 。是否可以检查并查看正在使用哪些类并仅加载这些类?

假设x.rb同时包含Hello和Goodbye类,而我的程序只使用Hello类,是否可以只加载Hello类?

对检查文档的脚本感到满意,并输出一个仅包含 Hello 类和使用它的代码的 .rb...如果不存在的话,这将是一个有趣的 github 项目,但我认为它已经超出了我的 ATM 技能。

最佳答案

当类在其自己的单独文件中定义时,您可以使用 autoload 12方法:

autoload :Hello,   'x/hello'
autoload :Goodbye, 'x/goodbye'

当您编写Hello时,您实际上正在访问Hello常量。如果未定义常量,autoload 使用 const_missing 自动请求文件。

请注意,我们仍在此处处理文件。 x/hello.rb 的内容将被简单地读取和评估。该代码可以运行任何操作。它可以需要其他文件。它可以定义一百万个其他类。

那是因为源代码实际上只是文本。对于解释语言尤其如此。例如,in Java, you can usually only declare one public type per "compilation unit" 。在 Ruby 中,没有这样的事情。


1 Matz strongly discourages the practice

² Ruby Inside article on autoload

关于ruby - 只加载 Ruby 中正在使用的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002405/

相关文章:

ruby-on-rails - 设计:使用两个可能的加密密码登录

java - android 将 Activity.this 传递给方法

oop - 在 Fortran 2003 中使用 'class' 的效率?

ruby - (...)在 `require' : no such file to load -- 'gemname' (LoadError)

ruby - 如何使用 graphql-ruby 测试 GraphQL 模式?

ruby-on-rails - Rails carrierwave 安装条件

javascript - Turbolinks 干扰 javascript

javascript - 选中任何复选框时如何更改 img 类?

javascript - Nodejs,需要函数内或脚本顶部的模块。哪个更适合自定义模块?

ruby - 两个 gem 共享相同的要求?