1

私は最近、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 つ以上のパラメーターの組み合わせ爆発を起こしがちです。これをモデル化するより良い方法はありますか?

4

1 に答える 1

1

「マグネット柄」ってまだ誰も言ってないの?

マグネットブログはこちら。

誰もが昼休みにいる必要があります。

次に、指定された引数の組み合わせをパッケージ化するために使用できる暗黙的なものを制御します。

回答例。

または簡潔に。

于 2013-09-05T22:41:31.560 に答える