YAML文件进行整数计算

时间:2015-06-16 07:39:14

标签: ruby-on-rails yaml

我有一个格式为

的YAML文件
- make: toyota
  group: popular
  cn: FungTin
  en: Toyota
  id: 83
  rank: 2 + %{random_number}
- make: honda
  group: popular
  cn: boontin
  en: Honda
  id: 121
  rank: 3 + %{random_number}

当我加载文件时。

MAKE = YAML.load_file("#{Rails.root}/config/data.yml")

我尝试通过执行操作来进行操作:

MAKE['rank'] % {random_number: rand(-1.0..1.0).round(3)}

这会导致no implicit conversion of String into Integer错误。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

您的MAKE返回array of hash如下,因此您应该选择执行操作的元素

MAKE = YAML.load_file("#{Rails.root}/config/data.yml")

=> [{"make"=>"toyota", "group"=>"popular", "cn"=>"FungTin", "en"=>"Toyota", "id"=>83, "rank"=>"2 + %{random_number}"}]

试试这个

MAKE.first['rank'] % {random_number: rand(-1.0..1.0).round(3)}
=> "2 + -0.263"

要获得总结,请使用eval

eval MAKE.first['rank'] % {random_number: rand(-1.0..1.0).round(3)}
=> 1.737

答案 1 :(得分:0)

我们有两种方法可以做到这一点 1.如果您只有一条记录,则使用以下代码。

此数据是哈希数组,因此您可以从第一个索引获取数据,如下所示:

MAKE[0]['rank'] % {random_number: rand(-1.0..1.0).round(3)}

它会像"2 + -0.046"

一样返回

如果你想得到这个的总和,你可以这样做

eval MAKE[0]['rank'] % {random_number: rand(-1.0..1.0).round(3)}

它会退回1.155

2.在另一种情况下,如果你的数据数组与你的情况相同,那么你必须定义,make你必须得到排名。
如下代码。
我找到了对honda的排名,请参阅以下代码。

MAKE.select{|x| x['make']=='honda'}[0]['rank'] %{random_number: 5}