1

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

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. 有没有标准的方法来做到这一点?

4

1 回答 1

3

好吧,在我看来并非如此。哈希和数组是非常不同的数据结构。为什么你认为他们应该支持这一点?

无论如何,您可以,例如,monkey-patch Array 类来添加values方法

class Array
  def values
    self
  end
end

然后您的方法大大简化:

def values_from_collection(array_or_hash)
  array_or_hash.values
end 

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

于 2013-01-08T03:10:49.600 回答