我有一个具有以下格式的 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
错误。
我怎样才能做到这一点?
您的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.如果您只有一个记录,则反对键,则使用以下代码。
此数据是哈希数组,因此您可以从第一个索引获取数据,如下所示:
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.In 另一种情况下,如果你有与你的情况具有相同键的数据数组,那么你必须定义,你必须根据哪个make
获得排名。
就像下面的代码一样。
我发现排名反对honda
,请参阅以下代码。
MAKE.select{|x| x['make']=='honda'}[0]['rank'] %{random_number: 5}