调用数组中对象的方法

时间:2017-10-16 18:54:58

标签: ruby

尝试在stock对象上调用closePrice方法时,没有打印出任何内容。但是,当前注释的代码有效。如何遍历StockList数组并调用Stock对象的closePrice方法?

class Stock
    attr_reader :date, :open, :high, :low, :close, :adjClose, :volume
    def initialize(date, open, high, low, close, adjClose, volume)
        @date = date
        @open = open
        @high = high
        @low = low
        @close = close
        @adjClose = adjClose
        @volume = volume
    end

    def closePrice
        "Close price: #{@close}"
    end
end

class StockList < Array

    def initialize()
        @stockList = []
    end

    def addStock(stock)
        @stockList.push(stock)
    end

end

stocks = Array.new
stockList = StockList.new()


CSV.foreach(fileName) do |stock|
    entry = Stock.new(stock[0], stock[1], stock[2], stock[3], stock[4], stock[5], stock[6])
    stocks.push(entry)

    stockList.addStock(entry)
end

# stocks.each do |stock|
#     puts stock.closePrice
# end

stockList.each do |stock|
    puts stock.closePrice
end

可能是缺少链接吗?只从Ruby开始。感谢。

1 个答案:

答案 0 :(得分:2)

问题出在StockList的实施中。您已扩展了类数组,但正在设置新的实例变量@stockList。当您致电addStock时,您正在向@stockList变量添加实例。但是,当您在each实例上调用StockList时,它不会在StockList上进行迭代。

可以想象,您可以将方法each添加到StockList,例如:

def each(&block) @stockList.each(&block) end

它应该有效。

但实际上我建议您重新考虑数据结构。 StockList实际上不应该延伸Array