1

Arrayまたはのいずれかである可能性があるコレクションから値を取得しようとしていますが、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-patchArrayクラスで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 に答える