我在' strct'中定义了一个结构。它可以像下一个例子一样添加一些ruby代码吗?
def strct(i)
{
"mwdata": [
i.times do //incorrect
{
"mwtype": "cell",
"mwsize": [
1,
3
],
"mwdata": [
10,
23,
199
]
}
end //incorrect
]
}
end
答案 0 :(得分:0)
您可以使用*
乘以数组,但这将创建一个对同一Hash对象的引用数组,更改一个,更改所有这些对象。 (正如@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.rb就像jsonbuilder一样,可以用来创建哈希&#34;模板&#34;。