__FILE__ returns 使用 binding.pry 时的不同值
__FILE__ returns different value when using binding.pry
__FILE__
returns 当前 Ruby 脚本文件的路径。
一个潜在的重要问题是,如果使用 binding.pry
,__FILE__
的计算结果为 (pry)
。根据是否在 binding.pry
的上下文中进行评估,让 __FILE__
评估为不同的值可能存在问题。例如,
$stdout.print "****************************************\n\n"
$stdout.print "FILE: #{__FILE__}\n\n"
$stdout.print "****************************************\n\n"
binding.pry
当脚本在 binding.pry
处暂停时,我得到:
__FILE__
# >> (pry)
有谁知道即使在 binding.pry
的上下文中也能获取当前文件路径的机制?
使用 _file_
而不是 __FILE__
。例如,给定两个文件:
# foo.rb
require 'pry'
require './bar'
binding.pry
b = Bar.new
和:
# bar.rb
require 'pry'
class Bar
def initialize
binding.pry
end
end
运行 他们 ruby foo.rb
:
ruby foo.rb
From: /Users/username/foo.rb @ line 3 :
1: require 'pry'
2: require './bar'
=> 3: binding.pry
4: b = Bar.new
(main):1 ⇒ _file_
=> "/Users/username/foo.rb"
(main):2 ⇒ exit
From: /Users/username/bar.rb @ line 4 Bar#initialize:
3: def initialize
=> 4: binding.pry
5: end
(#<Bar:0x00007fbb6caaff08>):1 ⇒ _file_
=> "/Users/username/bar.rb"
_file_
和任何其他局部变量名称可以在 binding.local_variables
.
中找到
Sergio Tulentsev 提出了一个简单的建议,在调用 binding.pry
之前将 __FILE__
赋给一个变量。
anothermh,提到_file_
绑定撬中可用
最后,我结合了两个答案:
# When in the context of binding.pry, __FILE__ resolves to '(pry)',
# binding contains the local variable _file_ which always resolves to
# the current file, even when being evaluated in the context of binding.pry .
# _file_ is only available, in binding. This does the trick:
current_file = __FILE__.downcase == '(pry)' ? _file_ : __FILE__
__FILE__
returns 当前 Ruby 脚本文件的路径。
一个潜在的重要问题是,如果使用 binding.pry
,__FILE__
的计算结果为 (pry)
。根据是否在 binding.pry
的上下文中进行评估,让 __FILE__
评估为不同的值可能存在问题。例如,
$stdout.print "****************************************\n\n"
$stdout.print "FILE: #{__FILE__}\n\n"
$stdout.print "****************************************\n\n"
binding.pry
当脚本在 binding.pry
处暂停时,我得到:
__FILE__
# >> (pry)
有谁知道即使在 binding.pry
的上下文中也能获取当前文件路径的机制?
使用 _file_
而不是 __FILE__
。例如,给定两个文件:
# foo.rb
require 'pry'
require './bar'
binding.pry
b = Bar.new
和:
# bar.rb
require 'pry'
class Bar
def initialize
binding.pry
end
end
运行 他们 ruby foo.rb
:
ruby foo.rb
From: /Users/username/foo.rb @ line 3 :
1: require 'pry'
2: require './bar'
=> 3: binding.pry
4: b = Bar.new
(main):1 ⇒ _file_
=> "/Users/username/foo.rb"
(main):2 ⇒ exit
From: /Users/username/bar.rb @ line 4 Bar#initialize:
3: def initialize
=> 4: binding.pry
5: end
(#<Bar:0x00007fbb6caaff08>):1 ⇒ _file_
=> "/Users/username/bar.rb"
_file_
和任何其他局部变量名称可以在 binding.local_variables
.
Sergio Tulentsev 提出了一个简单的建议,在调用 binding.pry
之前将 __FILE__
赋给一个变量。
anothermh,提到_file_
绑定撬中可用
最后,我结合了两个答案:
# When in the context of binding.pry, __FILE__ resolves to '(pry)',
# binding contains the local variable _file_ which always resolves to
# the current file, even when being evaluated in the context of binding.pry .
# _file_ is only available, in binding. This does the trick:
current_file = __FILE__.downcase == '(pry)' ? _file_ : __FILE__