如何在Ruby中填充数组?

3

这是我正在使用的代码:

class Trader

  def initialize(ticker ="GLD") 
    @ticker = ticker
  end

  def yahoo_data(days=12)

    require 'yahoofinance'

    YahooFinance::get_historical_quotes_days( @ticker, days ) do |row|
      puts "#{row.join(',')}"  # this is where a solution is required
    end
  end
end

yahoo_data方法从Yahoo Finance获取数据并将价格历史记录在控制台上。但是,您可以如何使用前面的代码来填充一个数组,以便稍后可以将其作为对象进行操作。类似于:

do |row| populate_an_array_method(row.join(',') end                                                                                                              
1个回答

4
如果你不给get_historical_quotes_days一个代码块,你会得到一个数组。然后你可以使用map在上面获取一个结果为join的数组。
通常情况下,自从Ruby 1.8.7以来,大多数迭代器方法在没有代码块的情况下调用时将返回一个可枚举对象。因此,如果foo.bar {|x| puts x}打印出值1,2,3,那么enum = foo.bar将返回一个包含值1,2,3的可枚举对象。如果你执行arr = foo.bar.to_a,你将得到一个数组[1,2,3]
如果有一个迭代器方法不遵循这个约定(例如来自某个库),你可以使用foo.enum_for(:bar)获得一个包含由bar产生的所有值的可枚举对象。
因此,假设get_historical_quotes_days没有返回一个数组,你可以使用YahooFinance.enum_for(:get_historical_quotes_days).map {|row| row.join(",") }来获取你想要的内容。

好的,这比我想象中的要容易。当我将代码块注释掉后,创建一个名为“a”的新对象,然后调用“a.yahoo_data”,就会得到一个数组。通过分配变量,如“q = a.yahoo_data”,调用 q.class 将返回 'Array'。q.length 返回 '8'。 - Milktrader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接