2011-07-30 21 views
8

Nokogiri belgelerinde neler olup bittiği konusunda kafam karıştı. Ruby modülü verilen argümanlar bir yöntemi mi çağırıyor?

require 'nokogiri' 
some_html = "<html><body><h1>Mr. Belvedere Fan Club</h1></body></html>" 

daha sonra bu üç satır aynı şeyi yaparsanız

Bildiğim kadarıyla söyleyebilirim,:

html_doc = Nokogiri::HTML::Document.parse(some_html) 
html_doc = Nokogiri::HTML.parse(some_html) 
html_doc = Nokogiri::HTML(some_html) 

ikinci birincisi için sadece bir kolaylık yöntemidir. Ama Ruby olmayan gözlerim için üçüncü, bir yönteme değil, modülüne bir argümanı geçiyor gibi görünüyor. Ruby'nin kurucularının olduğunu fark ettim, ama onlar Module (yeni) değil, Class.new formunu aldıklarını düşündüm. Burada neler oluyor?

+0

ilginç bir soru BTW –

cevap

8

Bu sadece sözdizimi şeker var Nokogiri :: HTML modül tanım bakmak:

module Nokogiri 
    class << self 
    ### 
    # Parse HTML. Convenience method for Nokogiri::HTML::Document.parse 
    def HTML thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block 
     Nokogiri::HTML::Document.parse(thing, url, encoding, options, &block) 
    end 
    end 

    module HTML 
    class << self 
     ### 
     # Parse HTML. Convenience method for Nokogiri::HTML::Document.parse 
     def parse thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block 
     Document.parse(thing, url, encoding, options, &block) 
     end 

     #### 
     # Parse a fragment from +string+ in to a NodeSet. 
     def fragment string, encoding = nil 
     HTML::DocumentFragment.parse string, encoding 
     end 
    end 

    # Instance of Nokogiri::HTML::EntityLookup 
    NamedCharacters = EntityLookup.new 
    end 
end 

Birincisi, denilen Nokogiri modülünde bir metot tanımlayabiliriz HTML (evet, Yakut verir Bunu yapmak için), sonra Nokogiri :: HTML modülünü tanımlarlar ve orada ayrıştırma sınıf yöntemini tanımlarlar.

Çoğu insan bilmiyorum ama çağırır :: operatör de yöntemini gerçekleştirmek için kullanılabilir:

"my_string"::size #will print 9 
+1

1 metod çağrıları, hayır için :: bilgi – macarthy

+0

için, ** ** ** ** ** ** ** ** ** ** ** gibi ** sabitlenmeye çalışılırken ** Nokogiri :: HTML :: Document **. –

+0

Üzgünüz, yorumumda sorumu sildim. Aralarında bir fark olup olmadığını sordum. ve ::. Teşekkürler Mauricio! – bsamek