我最近发现的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个参数。 有没有更好的方式来建模呢?