首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__FILE__在使用binding.pry时返回不同的值

__FILE__在使用binding.pry时返回不同的值
EN

Stack Overflow用户
提问于 2018-12-13 23:51:36
回答 2查看 581关注 0票数 2

__FILE__返回当前Ruby文件的路径。

一个潜在的重要问题是,如果使用binding.pry,则__FILE__的计算结果为(pry)。根据__FILE__是否在binding.pry上下文中进行计算,将其计算为不同的值可能会有问题。例如,

代码语言:javascript
复制
$stdout.print "****************************************\n\n"
$stdout.print "FILE: #{__FILE__}\n\n"
$stdout.print "****************************************\n\n"

binding.pry

当脚本在binding.pry上暂停时,我得到:

代码语言:javascript
复制
__FILE__
# >> (pry)

有人知道在binding.pry上下文中获取当前文件路径的机制吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-14 00:55:17

使用_file_而不是__FILE__。例如,给定两个文件:

代码语言:javascript
复制
# foo.rb
require 'pry'
require './bar'
binding.pry
b = Bar.new

以及:

代码语言:javascript
复制
# bar.rb
require 'pry'
class Bar
  def initialize
    binding.pry
  end
end

ruby foo.rb运行它们

代码语言:javascript
复制
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中找到。

票数 2
EN

Stack Overflow用户

发布于 2018-12-14 15:32:19

Sergio提出了一个简单的建议,在调用__FILE__之前将binding.pry赋给一个变量。

另外,还提到了在绑定pry中可用的_file_

最后,我把这两个答案结合起来:

代码语言:javascript
复制
# 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__
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53771718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档