接受散列或哈希数组作为Ruby方法的参数

时间:2012-08-13 17:37:25

标签: ruby-on-rails ruby

我有方法:

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进行手动类型检查?(数组)?

3 个答案:

答案 0 :(得分:7)

对我来说,最好的解决方案是将方法更改为:

def self.store(*hashes)
  params = hashes.flatten
  puts params.inspect
end
  • 如果您传递一个哈希,它将是一个数组
  • 如果传递哈希数组,则它保持不变
  • 如果您使用N个哈希值,它会将所有参数压缩为一维数组。

你可以传递任何你想要的东西。

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