负载如何与Ruby中的require不同?

Arp*_*nav 77 ruby ruby-on-rails

Ruby on Rails应用程序之间load和之间有什么主要区别require吗?或者它们都具有相同的功能?

Nik*_*ohl 94

require在所有已定义的搜索路径中搜索库,并将.rb或.so附加到您输入的文件名.它还确保只包含一次库.因此,如果您的应用程序需要库A和B以及库B请求库A,那么A只会加载一次.

随着load您需要添加库的全名,它被载入每次通话时间load-即使它已经是在内存中.

  • `require`通过`$ LOADED_FEATURES`(`$"`)全局数组跟踪已经加载的内容,`load`忽略. (4认同)

Jör*_*tag 39

Kernel#require和之间的另一个区别Kernel#load是,Kernel#load它采用可选的第二个参数,允许您将加载的代码包装到匿名的空模块中.

不幸的是,它不是很有用.首先,load通过访问全局命名空间,ed代码很容易打破模块,即它们仍然可以像monkeypatch那样class ::String; def foo; end end.第二,load不返回它包装代码的模块,所以你基本上必须ObjectSpace::each_object(Module)手工捕获它.