Ruby Scoping无法传递类变量

时间:2013-09-26 07:50:59

标签: ruby

class Scraper

def initialize(options = {}) do
  @options = options
end

def scrape
  Wombat.crawl do
    base_url @options[:base_url]
    path @options[:path]
    some_data css: @options[:css]
  end
end

end

样本用法:

sample = Scraper.new({base_url: "someurl.com", path:"/random", css: ".regular"})
sample.scrape

我似乎无法在scrape方法中访问@options。这是一个范围问题,可能通过平面范围解决,但我似乎无法解决它。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:3)

正如Marek Lipka所说,上下文可能会被instance_eval修改。如果是这种情况,则无法访问Scraper实例的实例变量,但可以访问局部变量。这样做:

def scrape
  options = @options
  Wombat.crawl do
    base_url options[:base_url]
    path options[:path]
    some_data css: options[:css]
  end
end