我最近发现 Scala 不允许同一方法的多个重载版本具有默认参数。我有一组方法重载,如果(且仅当)指定了一个主要参数,则需要隐式参数。这将是“主要”方法:
def replies(after: Option[Post] = None, limit: Option[Int] = None)
(implicit db: Instance, order: QueryOrdering[Post]): Stream[Post]
这从具有基本分页的数据库中获取条目。如果after
指定,则根据 ,仅order
应检索逻辑上跟随它的条目。但我不想指定未提供order
的情况。after
但是下面的代码是不允许的,因为只有一个重载可以有默认参数:
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 个参数的组合爆炸。有没有更好的方法来建模这个?