【问题标题】:Getting my Ruby file to load into Pry?让我的 Ruby 文件加载到 Pry 中?
【发布时间】:2013-12-29 01:17:31
【问题描述】:

我正在尝试使用 Pry 编辑我的 Ruby 文件。其中设置的变量很少,无论出于何种原因,我似乎都无法将cd 放入其中,因为即使在我“加载”文件之后它们也没有被定义。

代码如下:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri.XML('<foo><bar /><foo>', nil, 'UTF-8') 

url = "http://superbook.eventmarketer.com/category/agencies/" 

puts "Finished!"

我愿意:

load "./AgencyListingScraper.rb"

然后这是输出:

7] pry(main)> load './AgencyListingScraper.rb'
Finished!
=> true
[8] pry(main)> 

然后当我尝试做类似的事情时:

[8] pry(main)> url
NameError: undefined local variable or method `url' for main:Object
from (pry):6:in `__pry__'
[9] pry(main)> cd url
Error: Bad object path: url. Failed trying to resolve: url. #<NameError: undefined local     
variable or method `url' for main:Object>
[10] pry(main)> 

这就是我得到的。

我想我没有正确加载文件,尽管我已经搜索了几个小时,但我不知道如何正确执行此操作。几个月前,当我用 Ruby 制作了一个刮板时,我就这样做了,但这次我因为这点而在刚开始时遇到了麻烦。

提前感谢您的帮助!

【问题讨论】:

    标签: ruby pry


    【解决方案1】:

    我发现这个问题在谷歌上搜索,但建议的解决方案对我不起作用,因为我要加载的文件不是类也不是脚本,而是一个复杂的 ruby​​ 配置文件,所以我无法在代码中注入 pry。

    但我还在 Reddit 中找到了与 this gist 相关的答案,这正是我想要的。

    做一个

    Pry.toplevel_binding.eval File.read("stuff.rb")
    

    将在当前 pry 会话中有效地执行文件 stuff.rb 的 ruby​​ 代码,留下结果对象以供检查。

    【讨论】:

      【解决方案2】:

      试试这个方法:

      在您的文件中包含 Pry 并执行 binding.pry:

      require 'nokogiri'
      require 'open-uri'
      require 'pry'
      
      doc = Nokogiri.XML('<foo><bar /><foo>', nil, 'UTF-8') 
      
      url = "http://superbook.eventmarketer.com/category/agencies/" 
      
      binding.pry
      puts "Finished!"
      

      然后通过执行来运行文件:

      ruby AgencyListingScraper.rb 
      

      这应该会让您进入一个 Pry 会话,您可以在其中使用诸如 ls 之类的命令来查看所有变量。

      您使用 Pry 的方式和这种方式都有效。但是,load 在您的情况下可能不起作用的原因是局部变量不会跨文件传递,例如当您需要另一个文件时。

      尝试加载此文件:

      #test.rb
      y = "i dont get carried over cause i am a local variable"
      b= "i dont get carried over cause i am a local variable"
      AAA= "i am a constant so i carry over"
      @per = "i am an instance var so i get carried over as well"
      

      当您使用 load "test.rb" 在 Pry 中加载它时,您会看到您无法从该文件访问局部变量。

      【讨论】:

      • 谢谢!那行得通。我以前没有这样做。知道为什么我以前可能不需要这样做吗?
      • 两种方式都可以,但是,binding.pry 是我的首选方式,因为您仍然可以访问本地变量。查看编辑以获取更多信息!很高兴能帮上忙
      • 啊,我看到了关于局部变量和实例变量的内容。非常感谢你的帮助。如果没有这些额外的知识,我很快就会开始发疯。
      • 是否可以在某些操作后将文件加载到 pry 中?想要在手动测试期间加载多个文件...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      相关资源
      最近更新 更多