Полагаю, вы ожидаете, что неявный параметр ord
в WBTreeSet
будет передан в значение по умолчанию tree
.К сожалению, это не будет работать, потому что в Scala значения параметров по умолчанию не могут ссылаться на другие значения параметров в том же списке параметров или в последующих списках параметров, например,
def thisWillWork(a: Int)(b: Int = a*2) = ???
def thisWillNotWork(a: Int, b: Int = a*2) = ???
def thisWillNotWork(a: Int = b*2)(b: Int) = ???
Это, плюс тот факт, что неявные параметры могут толькоПередача в последнем списке параметров означает, что ваше значение по умолчанию tree
param не может получить доступ к ord
param.
Как обойти это?
Во-первых, предпочтительнее использовать Ordering
класс типов вместонеявного преобразования в Ordered
, например
case class Node[K, V](...)(implicit ord: Ordering[K])
или короче, с использованием привязанного к контексту синтаксиса:
case class Node[K: Ordering, V](...)
Затем, если вы хотите сохранить настройки по умолчаниюзначение, вы, вероятно, должны использовать перегруженный apply
метод вместо значения параметра по умолчанию:
case class WBTreeSet[K: Ordering](tree: Tree[K, Nothing])
object WBTreeSet {
def apply[K: Ordering](): WBTreeSet[K] = WBTreeSet[K](Tree[K,Nothing]())
}