显示计算结果的 Ruby 约定
我猜你是这个意思
model = [:model].product(car_id).map { |k,v| {k=>v} }
产生一个包含单个哈希的数组:
[{:model=>"123"}]
并且您没有执行该语句:
model = [{:model=>"123"}]
这将覆盖前一个语句中model 的值,使前一个语句毫无意义。如果是这样,正常的写法如下。
model = [:model].product(car_id).map { |k,v| {k=>v} }
#=> [{:model=>"123"}]
计算数组
接下来,
arr = [:model].product(car_id)
#=> [[:model, "123"]]
但是当数组[:model] 和car_id 都包含一个元素时,为什么还要使用Array#product?写起来更简单
arr = [[:model, car_id.first]]
#=> [[:model, "123"]]
将数组转换为哈希
由于arr只包含一个元素,所以mapping它没有多大意义;只需将其转换为哈希:
Hash[arr]
#=> {:model=>"123"}
或(对于 Ruby 1.9+ 版本):
arr.to_h
#=> {:model=>"123"}
将键值对添加到哈希中
如果你想添加键值对:make => "acura"到
h = {:model=>"123"}
你可以简单地写
h[:make] = "acura"
#=> "acura"
h #=> {:model=>"123", :make=>"acura"}
或者,在一行中,
(h[:make] = "acura") && h
#=> {:model=>"123", :make=>"acura"}
总结
把这些放在一起,你可以写
h = [[:model, car_id.first]].to_h
#=> {:model=>"123"}
(h[:make] = "acura") && h
#=> {:model=>"123", :make=>"acura"}