__FILE__返回当前Ruby脚本文件的路径。
一个潜在的重要问题是,如果使用binding.pry__FILE__的计算结果为(pry)根据是否在__FILE__的上下文中求值,将binding.pry求值为不同的值可能会有问题例如,

$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中找到。

关于ruby - __FILE__在使用binding.pry时返回不同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53771718/

10-13 05:28