2017-10-16 9 views
0

ストックオブジェクトの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

このコードは機能するはずです。注意すべき点として、Rubyは、close_priceのようにすべて小文字の変数とメソッド名を指定することを強くお勧めします。大文字は定数とクラス/モジュール名のために予約されています。さらに、 'new'メソッドは、不条理数の引数をとります。関連するすべての値を持つハッシュを取得するように指示する必要があります。 – tadman

答えて

2

問題はStockListの実装にあります。クラス配列を拡張しましたが、新しいインスタンス変数@stockListを設定しています。 addStockに電話すると、@stockList変数にインスタンスが追加されます。しかし、StockListインスタンスでeachと呼び出すと、StockListを反復しません。

おそらく、あなたは次のようにStockListに方法eachを追加することができます。

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

、それが動作するはずです。

本当に私はあなたのデータ構造を再考することをお勧めします。 StockListは実際にはArrayを拡張しません。

+0

Robに感謝します。データをどのように構造化するべきかについてのご意見はありますか?この背後にある考え方は、メソッドを追加できる '' List''の株式を持つことでした。 – forgetaboutme

+1

Array per seを拡張するには何も問題はありませんが、この場合は機能を追加しないので、無意味です。 'stocks'配列とこのStockListの違いは基本的にゼロです。 – tadman

+1

'StockList'オブジェクトがうまくいけばいいと思います。私はArrayを拡張しません。データを維持するために '@ stockListList'内部変数に依存しています。そして、適切なメソッドを追加し、適切なものを使用します。本当にたくさんの反復型のメソッドが必要な場合(本当にそうしているのかどうかは疑問です)、 '@ stockList'変数(例:attr_reader:stockList)を公開するか、オブジェクト自体のメソッドが'each'メソッドとそれに続く' 'Incluum Enumerable''(https://ruby-doc.org/core-2.4.0/Enumerable.html) –

関連する問題