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'