实例方法无法作用于实例变量



尽管我需要Nokogiri并初始化了变量,但我的方法无法访问Nokogiri方法。我想这样做:

class Requester
require 'nokogiri'
  def initialize(body)
    @body = body
  end
  def destination
    @body.at_css('destination')
  end
end

然后我传递body,这是一个Nokogiri文件。

mess = Requester.new(body)

当我这样做时,我得到一个"无方法错误":

mess.destination

我不明白。我以为如果我require的话,我的班级会有所有的Nokogiri方法。

完整的错误在at_css上,如下所示:

NoMethodError (undefined method `at_css' for #<Requester:0x007f685d971478>

你混淆了requireinclude.

require加载文件或 Gem。

include包括另一个对象的方法。

a.rb

module A
  def hello
    "hello world"
  end
end

b.rb

require 'a'
class B
  include A
end
puts B.new.hello # hello world

但是,您确实需要重新考虑您要做什么。您不能包含类 - 扩展类。您要查找的对象是类Nokogiri::HTML::Document

如果您尝试构建文档爬网程序,则可以使用委托人模式:

require 'nokogiri'
class Requester < Delegator
  def initialize(body)
    super 
    @body = body
    @doc = Nokogiri::HTML(body)
  end
  def __getobj__
    @doc
  end
end

或者,您将创建一个 Nokogiri::HTML::Document 的子类。

  • http://www.nokogiri.org/tutorials/searching_a_xml_html_document.html
  • http://ruby-doc.org/stdlib-2.2.1/libdoc/delegate/rdoc/Delegator.html

相关内容

  • 没有找到相关文章

最新更新