Array/Setのようなオブジェクトまたはハッシュの引数を受け入れるメソッドがあります。メソッドの要点は次のようなものです。
def find(query = {})
  if Array === query or Set === query
    query = {:_id => {'$in' => query.to_a}}
  end
  mongo_collection.find(query)
end
このメソッドはIDオブジェクトのセットを受け入れ、それをMongoDBのハッシュ条件に変換します。
上記のコードに関する2つの問題:
- 標準ライブラリから「set」が必要ない場合は失敗します。チェックを実行するためだけに依存関係を要求したくありません。
- 厳密な型比較はしたくありません。配列またはセットのような値を受け入れ、それを。を使用して値の配列にキャストしたいと思いますto_a。
このチェックをどのように実行しますか?覚えておくべきいくつかの考慮事項:
- メソッドを確認できましto_aryたが、Setが応答しませんto_ary。このメソッドを実装するオブジェクトは基本的に配列である必要があり、Setは基本的に配列ではないことに同意します。Rubyでto_intとto_strを実装した結果を参照してください。
- to_aハッシュが応答するので確認できません
- ArrayとSetに共通しているが、Hashには共通していないメソッドは次のとおりです。 - [:&, :+, :-, :<<, :collect!, :flatten!, :map!, :|]
私はこのようなもので行くことにしました:
query = {:_id => {'$in' => query.to_a}} if query.respond_to? :&
交差点は、集合のようなオブジェクトが持つ演算子である可能性が高いためです。しかし、これについてはよくわかりません。