尝试在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开始。感谢。
答案 0 :(得分:2)
问题出在StockList
的实施中。您已扩展了类数组,但正在设置新的实例变量@stockList
。当您致电addStock
时,您正在向@stockList
变量添加实例。但是,当您在each
实例上调用StockList
时,它不会在StockList
上进行迭代。
可以想象,您可以将方法each
添加到StockList
,例如:
def each(&block)
@stockList.each(&block)
end
它应该有效。
但实际上我建议您重新考虑数据结构。 StockList
实际上不应该延伸Array
。