我正在尝试使用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!"
Run Code Online (Sandbox Code Playgroud)
在Pry,我做:
load "./AgencyListingScraper.rb"
Run Code Online (Sandbox Code Playgroud)
然后这是输出:
7] pry(main)> load './AgencyListingScraper.rb'
Finished!
=> true
[8] pry(main)>
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试做类似的事情:
[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)>
Run Code Online (Sandbox Code Playgroud)
这就是我得到的.
我想我没有正确加载文件,虽然我已经搜索了几个小时,但我无法弄清楚如何正确地执行此操作.几个月前,当我用Ruby制作刮刀时,我就是这么做的,但这次我因为这一点而难以入手.
感谢您的帮助!
JaT*_*aTo 10
试试这种方式:
在您的文件中包含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!"
Run Code Online (Sandbox Code Playgroud)
然后执行以下命令运行该文件:
ruby AgencyListingScraper.rb
Run Code Online (Sandbox Code Playgroud)
这应该会让你进入一个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"
Run Code Online (Sandbox Code Playgroud)
使用Pry加载它时,load "test.rb"您可以看到无法从该文件访问本地变量.
我发现了这个问题,但提出的解决方案对我不起作用,因为我要加载的文件不是类也不是脚本,而是复杂的ruby配置文件,因此我无法在代码中插入撬动。
但是我也在Reddit中找到了一个与这个要旨相关的答案,这正是我所要的。
做一个
Pry.toplevel_binding.eval File.read("stuff.rb")
Run Code Online (Sandbox Code Playgroud)
将stuff.rb在当前的撬动会话中有效执行文件的ruby代码,将生成的对象留待检查。
| 归档时间: |
|
| 查看次数: |
10401 次 |
| 最近记录: |