【问题标题】:Why is "File.expand_path(...)" resolving to something different from what I expect?为什么“File.expand_path(...)”解析为与我预期不同的东西?
【发布时间】:2019-08-17 21:53:32
【问题描述】:

我目前正在逐步检查gitlab_development_kit gem 的代码以了解它是如何工作的。

我目前在this line of code,我在该行的上方和下方放置了一个调试器点。

    3: require 'byebug'
    4: byebug
    5: 
=>  6: $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
    7: byebug
    8: require 'gitlab_development_kit'

我检查$LOAD_PATHFile.expand_path('../../lib', __FILE__) 的值:

(byebug) $LOAD_PATH
["/usr/local/Cellar/rbenv/1.1.2/rbenv.d/exec/gem-rehash", ...]

(byebug) File.expand_path('../../lib', __FILE__)
"/Users/richiethomas/Workspace/ThreeEasyPieces/lib"

我输入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', __FILE__) 的值确实是"/Users/richiethomas/Workspace/ThreeEasyPieces/lib",那么这就是我希望预先添加到$LOAD_PATH 的值。但相反,RBENV 管理的 gem 版本中的 lib 目录似乎是预先挂起的。这是什么恶魔的魔法? :-)

【问题讨论】:

    标签: ruby rubygems rbenv


    【解决方案1】:

    提示符处的__FILE__ 与文件中的__FILE__ 的值不同。其实__FILE__是当前正在执行的文件,但是在交互提示下,没有当前正在执行的文件,所以,__FILE__只是一个占位符。

    在 IRb 中,__FILE__ 的计算结果为 '(irb)',在 Pry 中,它的计算结果为 '(pry)',在 Byebug 中,它的计算结果为 '(byebug)'

    (byebug) __FILE__
    "(byebug)"
    

    由于(byebug) 是一个完全合法的文件名,File.expand_path 将使用当前工作目录来扩展它。例如。如果当前工作目录是/a/b/cFile.expand_path(__FILE__) 将评估为/a/b/c/(byebug)。因此,

    File.expand_path('../../lib', __FILE__)
    

    然后会扩展为

    '/a/b/lib'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多