如何在其他方法中使用初始化方法中初始化的实例变量?

时间:2016-09-28 12:58:23

标签: ruby

这就是我班上的样子:

require 'oga'
require 'net/http'
require 'pry'

module YPCrawler
  class PageCrawler
    def initialize(url)
      @url = 'http://www.someurl.com'
    end

    def get_page_listings
      body = Net::HTTP.get(URI.parse(@url))
      document = Oga.parse_html(body)    
      bizlistings = document.css('div.result')
      binding.pry    
    end

  end
end

然而,当我被投入pry时,我看到了这一点:

[1] pry(YPCrawler::PageCrawler)> @url
=> nil
[2] pry(YPCrawler::PageCrawler)> body
NameError: undefined local variable or method `body' for YPCrawler::PageCrawler:Class
from (pry):2:in `<class:PageCrawler>'
[3] pry(YPCrawler::PageCrawler)> document
NameError: undefined local variable or method `document' for YPCrawler::PageCrawler:Class
from (pry):3:in `<class:PageCrawler>'
[4] pry(YPCrawler::PageCrawler)> bizlistings
NameError: undefined local variable or method `bizlistings' for YPCrawler::PageCrawler:Class
from (pry):4:in `<class:PageCrawler>'
[5] pry(YPCrawler::PageCrawler)> url
NameError: undefined local variable or method `url' for YPCrawler::PageCrawler:Class
Did you mean?  URI
from (pry):5:in `<class:PageCrawler>'
[6] pry(YPCrawler::PageCrawler)> @url
=> nil

为什么我无法访问在@url方法中初始化的def initialize

修改1

添加了我的代码和终端PRY会话的真实截图,因为我对binding.pry的位置有些怀疑。

code terminal

修改2

我的主lib/yp-crawler.rb文件如下所示:

require_relative "yp-crawler/version"
require_relative "yp-crawler/page-crawler"
require_relative "yp-crawler/listing-crawler"

module YPCrawler
end

因此,上面运行的代码是我的yp-crawler/page-crawler.rb文件,我将其包含在lib/yp-crawler.rb文件中。

编辑3

这是我整个工作流程的录音。请告诉我我缺少的东西:

https://www.dropbox.com/s/jp1abthfkiplb4p/Pry-not-cooperating.webm?dl=0

1 个答案:

答案 0 :(得分:2)

我打赌你的代码如下:

module YPCrawler
  class PageCrawler
    attr_reader :url
    def initialize(url)
      @url = 'http://www.someurl.com'
    end

    def get_page_listings
      body = Net::HTTP.get(URI.parse(@url))
      document = Oga.parse_html(body)    
      bizlistings = document.css('div.result')
    end
    binding.pry    
  end
end

即使您可能binding.pry移动到方法中,但很可能您没有重新加载控制台,因此它会执行“错误”版本。

从您的屏幕截图中可以清楚地看到,任何一个文件都没有重新加载,或者您只是更改了错误的文件。