如果我加载x.rb
, 然后加载该文件中的所有类 https://stackoverflow.com/questions/10001106/does-requiring-a-gem-load-everything-including-things-i-dont-use/10001223#10001223。是否可以检查并查看正在使用哪些类并仅加载这些类?
假设x.rb同时包含Hello和Goodbye类,而我的程序只使用Hello类,是否可以只加载Hello类?
对检查文档的脚本感到满意,并输出一个仅包含 Hello 类和使用它的代码的 .rb...如果不存在的话,这将是一个有趣的 github 项目,但我认为它超出了我的技能范围。
当类在它们自己的单独文件中定义时,您could使用autoload http://www.ruby-doc.org/core-1.9.2/Kernel.html#method-i-autoload12 方法:
autoload :Hello, 'x/hello'
autoload :Goodbye, 'x/goodbye'
当你写的时候Hello
,您实际上正在访问Hello
持续的。autoload
uses const_missing
如果未定义常量,则自动需要文件。
请注意,我们在这里仍在处理文件。的内容x/hello.rb
将被简单地阅读和评估。该代码可以运行任何操作。它可以require
其他文件。它可以定义一百万个其他类。
那是因为源代码实际上只是文本。对于解释语言尤其如此。例如,在Java中,每个“编译单元”通常只能声明一个公共类型 http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.6。在 Ruby 中,没有这样的东西。
¹ 马茨强烈反对这种做法 http://bugs.ruby-lang.org/issues/5653
² Ruby Insider 文章autoload http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)