【问题标题】:YAML file do integer calculationYAML 文件进行整数计算
【发布时间】:2015-06-16 07:39:13
【问题描述】:

我有一个格式如下的 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 错误。

我怎样才能做到这一点?

【问题讨论】:

    标签: ruby-on-rails yaml


    【解决方案1】:

    你的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
    

    【讨论】:

      【解决方案2】:

      我们有两种方法可以做到这一点。
      1.如果你只有一条记录,对key,然后使用下面的代码。

      这个数据是哈希数组,所以你可以从第一个索引中获取数据,如下所示:

      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}
      

      【讨论】:

      • 当它只是哈希中的一项时它可以工作,但是如果它是一个数组列表呢?
      • 我已经更新了代码,现在你可以看到这两个步骤了。 @Chris Yeung
      猜你喜欢
      • 1970-01-01
      • 2013-04-01
      • 2021-09-09
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2017-08-11
      • 2011-11-08
      • 1970-01-01
      相关资源
      最近更新 更多