我正在尝试执行以下操作。
@i, price_0, price_1, price_2 = 0, 0, 0, 0
until @i > 2 do
if trade_history[@i]["type"] == 2
price_"#{@i}" = (trade_history[@i]["xbt_gbp"]).to_f ##NOT WORKING
end
@i += 1;
end
我无法在网上找到任何可以在Ruby中动态命名变量的地方。我想要做的是只要有类型2就提取trade_history对象的价格。我需要能够使用价格变量(price_0..2)在循环结束时进行计算。请帮忙! : - )
答案 0 :(得分:0)
我不认为这是最好的方法,你应该使用包含价格的Hash
,但如果你真的想动态分配你创建的局部变量,请使用binding.local_variable_set
binding.local_variable_set("price_#{@i}", "your value")
请注意,这仅适用于Ruby 2.1。有关详细信息,请参阅How to dynamically create a local variable?。
如果您更喜欢实例变量,可以使用。
instance_variable_set("@price_#{@i}", 1)
答案 1 :(得分:0)
只需将值存储在数组中:
prices = []
3.times do |i|
history = trade_history[i]
prices << history["xbt_gbp"].to_f if history["type"] == 2
end
在此循环之后,prices
数组将保存结果,如下所示:
prices
#=> e.q. [0.2, 0.4, 0.5]
使用reduce
或inject
:
prices.inject(:+)
#=> 1.1