Ruby 为什么是;文件。展开“U路径(…)”;解决与我期望的不同的问题?
我目前正在逐步浏览Ruby 为什么是;文件。展开“U路径(…)”;解决与我期望的不同的问题?,ruby,rubygems,rbenv,Ruby,Rubygems,Rbenv,我目前正在逐步浏览gitlab\u开发工具包gem的代码,看看它是如何工作的 我目前在,并且我已经在该行的上方和下方放置了一个调试器点 3: require 'byebug' 4: byebug 5: => 6: $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) 7: byebug 8: require 'gitlab_development_kit' 我检查$LOAD\u
gitlab\u开发工具包
gem的代码,看看它是如何工作的
我目前在,并且我已经在该行的上方和下方放置了一个调试器点
3: require 'byebug'
4: byebug
5:
=> 6: $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
7: byebug
8: require 'gitlab_development_kit'
我检查$LOAD\u PATH
和文件的值。展开\u PATH('../../lib',\u文件\u)
:
我键入next
以推进调试器,然后重新检查上述值:
(byebug) next
[2, 11] in /Users/richiethomas/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/gitlab-development-kit-0.2.5/bin/gdk
2: require 'yaml'
3: require 'byebug'
4: byebug
5:
6: $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
=> 7: byebug
8: require 'gitlab_development_kit'
9:
10:
11:
(byebug) File.expand_path('../../lib', __FILE__)
"/Users/richiethomas/Workspace/ThreeEasyPieces/lib"
(byebug) $LOAD_PATH
["/Users/richiethomas/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/gitlab-development-kit-0.2.5/lib", "/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash", ...]
如果
File.expand_path('../../lib',_ufile_uu)
的值真的是“/Users/richiethomas/Workspace/ThreeEasyPieces/lib”
,那么这就是我所期望的$LOAD_path
。但是,看起来RBENV管理的gem版本中的lib
dir被挂起了。这是什么样的魔鬼魔法?:-) 提示下的\uuuuuuuuuu文件
的计算结果与文件中的\uuuuuuu文件
值不同。事实上,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
是当前正在执行的文件,但是在交互提示下,没有当前正在执行的文件,因此,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
在IRb中,\uuuuu文件
计算为'(IRb)
,在Pry中,它计算为'(Pry)
,在Byebug中,它计算为'(Byebug)
:
由于(byebug)
是一个完全合法的文件名,File.expand\u path
将使用当前工作目录中的任何内容对其进行扩展。例如,如果当前工作目录是/a/b/c
,File.expand\u path(\uu File\uuu)
将计算为/a/b/c/(byebug)
。因此
File.expand_path('../../lib', __FILE__)
然后将扩展到
'/a/b/lib'
File.expand_path('../../lib', __FILE__)
'/a/b/lib'