剥离并将字符串推入数组

时间:2017-05-30 00:53:25

标签: ruby

我通过bin文件夹在本地运行我的程序;这只是一个小型的CLI项目。我试图剥离并将字符串推入数组。

这是我的代码:

require 'nokogiri'
require 'open-uri'

module BestPlaces
  class Places
    attr_accessor :name, :population, :places

      def initialize
        @places = []
      end

      def self.scrape_places
        doc = Nokogiri::HTML(open("https://nomadlist.com/best-cities-to-live"))
        places = doc.search("div.text h2.itemName")
        ranks = doc.search("div.rank")
        places.each{|e| @places << e.text.strip}

          @places.each do |place|
            i = @places.index(place)
          puts "#{ranks[i].text}. #{place}"
        end
      end
    end

     class CLI
       def list_places
         puts "Welcome to the best places on Earth!"
         BestPlaces::Places.scrape_places
       end

       def call
         list_places
         menu
         goodbye
       end
     end
  end

当我运行程序时,出现错误:

block in scrape_places': undefined method `<<' for nil:NilClass (NoMethodError)

非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

简而言之:您获得undefined method '<<' for nil:NilClass,因为您尝试操纵类实例变量 @places,其值为nil

方法@places中的第一个initialize是一个对象实例变量,您将其值设置为[],但是类方法{{1}中的第二个@places是一个类实例变量,你没有给它任何值,所以它默认为零。请注意两个变量不相同。由于您认为它们是相同的,因此您可能希望将self.scrape_places更改为def self.scrape_places,那么它们将是相同的对象实例变量。

另见:

Ruby class instance variable vs. class variable