在结构上添加ruby代码出错



我有一个在' struct '中定义的结构。它可以添加一些ruby代码,如下一个例子?

  def strct(i)
        {
          "mwdata": [
       i.times do //incorrect
            {
              "mwtype": "cell",
              "mwsize": [
                1,
                3
              ],
              "mwdata": [
                10,
                23,
                199
              ]
            }
        end //incorrect
          ]
        }
        end

您可以使用*进行数组相乘,但这将创建一个引用相同哈希对象的数组,更改一个,更改所有数组。(正如@mudasobwa在评论中指出的)

def strct(i)
  { "mwdata": [ {...} ] * i }
end

也可以使用tap:

def strct(i)
  { "mwdata" => [].tap do |array|
      i.times do 
        array << { .... }
      end
    end
  }
end

或注入:

def strct(i)
  { "mwdata" => 1.upto(i).inject([]) do |array|
      array << { .... }
    end
  }
end 

注意

我理解这个问题的原因,因为我经常发现自己做这样的事情:

def strct(i)
  result = { "foo" => [] }
  i.times do
    result["foo"] << "Something #{i}"
  end
  result
end

快速谷歌给了我这个:hash_builder。

最新更新