这是我正在使用的代码:
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 获取数据并将价格历史记录放在控制台上。但是,您将如何使用前面的代码来填充一个稍后可以作为对象进行操作的数组,而不是一个简单的 puts 蒸发到以太中。
类似的东西:
do |row| populate_an_array_method(row.join(',') end
最佳答案
如果您不给 get_historical_quotes_days
一个 block ,您将得到一个数组。然后,您可以对其使用 map
以获得 join
结果的数组。
一般来说,自 ruby 1.8.7 以来,大多数迭代器方法在调用时都会返回一个可枚举的对象,而无需 block 。所以如果 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(",") }
得到你想要的。
关于ruby - 如何在 Ruby 中填充数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4590063/