私は最近、Scala が同じメソッドの複数のオーバーロードされたバージョンがデフォルトのパラメーターを持つことを許可していないことを知りました。メイン パラメーターの 1 つが指定されている場合 (および指定されている場合にのみ)、暗黙的なパラメーターが必要な一連のメソッド オーバーロードがあります。これが「メイン」メソッドになります。
def replies(after: Option[Post] = None, limit: Option[Int] = None)
(implicit db: Instance, order: QueryOrdering[Post]): Stream[Post]
これは、基本的なページングを使用してデータベースからエントリを取得します。が指定されている場合after
、 に従って論理的にそれに続くエントリのみをorder
取得する必要があります。しかし、提供されていないorder
場合は指定する必要after
はありません。ただし、既定のパラメーターを持つことができるオーバーロードは 1 つだけであるため、次のコードは許可されません。
def replies(limit: Option[Int] = None)
(implicit db: Instance): Stream[Post]
replies(limit = limit)(db, QueryOrdering.noOp)
すべての可能なパラメーターの組み合わせのメソッドを書き留めることができます。
def replies()(implicit db: Instance)
def replies(after: Post)(implicit db: Instance, order: QueryOrdering[Post])
def replies(limit: Int)(implicit db: Instance)
しかし、これは煩わしく、2 つ以上のパラメーターの組み合わせ爆発を起こしがちです。これをモデル化するより良い方法はありますか?