gpt4 book ai didi

ruby - 为什么我需要 $LOAD_PATH 之外的 gem

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:41 24 4
gpt4 key购买 nike

我在我的rvm gem set里安装了一个gem coffee-cupruby-2.1.1@test 路径是/Users/dingxijin/.rvm/gems/ruby-2.1.1@test/gems/coffee-cup-0.0.4.

然后我打开irb,就像这样:

2.1.1 :001 > puts $:
/Users/dingxijin/.rvm/rubies/ruby-2.1.1/lib/ruby/site_ruby/2.1.0
/Users/dingxijin/.rvm/rubies/ruby-2.1.1/lib/ruby/site_ruby/2.1.0/x86_64-darwin12.0
/Users/dingxijin/.rvm/rubies/ruby-2.1.1/lib/ruby/site_ruby
/Users/dingxijin/.rvm/rubies/ruby-2.1.1/lib/ruby/vendor_ruby/2.1.0
/Users/dingxijin/.rvm/rubies/ruby-2.1.1/lib/ruby/vendor_ruby/2.1.0/x86_64-darwin12.0
/Users/dingxijin/.rvm/rubies/ruby-2.1.1/lib/ruby/vendor_ruby
/Users/dingxijin/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0
/Users/dingxijin/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin12.0
=> nil
2.1.1 :002 > require "coffee-cup"
NameError: uninitialized constant CoffeeCup::Rails
from /Users/dingxijin/.rvm/gems/ruby-2.1.1@test/gems/coffee-cup-0.0.4/lib/coffee-cup/engine.rb:2:in `<module:CoffeeCup>' ..........

ruby 是否从 $LOAD_PATH 目录中搜索 gem?为什么我可以要求coffee-cup,明明是$LOAD_PATH没有它的目录?

最佳答案

require 的原始“正常”行为就是您所描述的:在 LOAD_PATH 中搜索请求的文件,如果没有找到 LOAD_ERROR 被引发。 Rubygems 通过 replacing the Kernel#require method 修改此行为.对新的 require 方法的注释解释了会发生什么:

When RubyGems is required, Kernel#require is replaced with our own which is capable of loading gems on demand.

When you call require 'x', this is what happens:

  • If the file can be loaded from the existing Ruby loadpath, it is.
  • Otherwise, installed gems are searched for a file that matches. If it's found in gem 'y', that gem is activated (added to the loadpath).

The normal require functionality of returning false if that file has already been loaded is preserved.

Ruby 默认包含 Rubygems,现在这种新行为已成为常态。

在您的示例中,如果您在从 gem 中请求文件后再次查看加载路径,您应该会看到已添加 gem 的路径。

关于ruby - 为什么我需要 $LOAD_PATH 之外的 gem ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23714324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com