__FILE__ возвращает другое значение при использовании binding.pry - PullRequest
0 голосов
/ 14 декабря 2018

__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?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Серхио Туленцев сделал простое предложение: присвойте __FILE__ переменной, прежде чем вызывать binding.pry.

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__
0 голосов
/ 14 декабря 2018

Используйте _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.

...