Я бы предпочел использовать последствия.

те предположим, что я хочу создать черту, которую я могу смешать с любым Traversable [T]. В конце я хочу сказать что-то вроде:

val m = Map("name" -> "foo") with MoreFilterOperations

и иметь методы для MoreFilterOperations, которые выражены во всем, что может предложить Traversable, например:

def filterFirstTwo(f: (T) => Boolean) = filter(f) take 2

Однако проблема состоит в том, что T не определен как параметр типа в MoreFilterOperations. Как только я это сделаю, это, конечно, выполнимо, но тогда мой код будет выглядеть так:

val m = Map("name" -> "foo") with MoreFilterOperations[(String,String)]

или если я определю переменную этого типа:

var m2: Map[String,String] with MoreFilterOperations[(String,String)] = ...

которыйспособ многословия на мой вкус. Я хотел бы, чтобы черта была определена таким образом, чтобы я мог написать последнее как:

var m2: Map[String,String] with MoreFilterOperations

Я пробовал собственные типы, члены абстрактных типов, но это не принесло ничего полезного. Есть какие-нибудь подсказки?

Ответы на вопрос(1)

Ваш ответ на вопрос