从Array或Hash获取值的单一接口

时间:2013-01-08 03:06:27

标签: ruby

尝试从可能是ArrayHash的集合中获取值,但基于类型的切换似乎很尴尬:

def values_from_collection(array_or_hash)
  case array_or_hash
  when array_or_hash.is_a? Array
      array_or_hash
  when array_or_hash.is_a? Hash
      array_or_hash.values
  end
end 

似乎应该有两个类都支持的单个接口/方法,但Enumerable中没有明显的突出显示。有没有一种标准的方法来实现这一目标?

1 个答案:

答案 0 :(得分:3)

嗯,对我来说似乎不是这样。散列和数组是非常不同的数据结构。为什么你认为他们应该支持这个?

无论如何,你可以,例如,猴子补丁Array类来添加values方法

class Array
  def values
    self
  end
end

然后你的方法大大简化了:

def values_from_collection(array_or_hash)
  array_or_hash.values
end 

但在我看来,这比分支更糟糕。