我有方法:
def self.store(params)
params.each { }
end
如果我传递一个Hashes数组,它的效果很好:
params = [ { key: 'value' }, { key: 'value' } ]
但是,我可能只希望传递一个哈希,而不是哈希数组:
params = { key: 'value' }
将哈希转换为哈希数组的最简洁的Ruby方法是什么?
Array()方法是一种确保始终返回数组的方法,但是当传递Hash时,它会被转换为数组本身。
Array({ key: 'value' }) => [[:key, 'value']]
我需要什么:
{ key: 'value' } => [ { key: 'value' } ]
有没有很好的方法来实现它,或者我是否必须使用is_a进行手动类型检查?(数组)?
答案 0 :(得分:7)
对我来说,最好的解决方案是将方法更改为:
def self.store(*hashes)
params = hashes.flatten
puts params.inspect
end
你可以传递任何你想要的东西。
self.store({:key => 'value'}) # => [{:key => 'value'}]
self.store({:key => 'value'}, {:foo => 'bar'}) # => [{:key => 'value'}, {:foo => 'bar'}]
self.store([{:key => 'value'}, {:foo => 'bar'}]) # => [{:key => 'value'}, {:foo => 'bar'}]
答案 1 :(得分:3)
试试这个
def self.store(params)
params = [params].flatten
...
end
答案 2 :(得分:0)
我会这样做:
C2