Я не уверен, что вы думаете, что происходит в этом методе, но кажется, что вы либо сбиты с толку, либо написали не то.
В вашем примере T
- это параметр типа, ограниченный выше типом _Team
(который, я полагаю, является либо классом, либо признаком). Впоследствии вы игнорируете T
, так что может быть фантомным типом, но по вашему вопросу, но на самом деле это не так.
Вы не можете преобразовать RosterController
в _Team
, потому что он либо равен единице, либо нет. Я могу сделать вывод, что RosterController
должен быть конкретным классом, как вы его создаете. Это либо подтип _Team
, либо нет.
Если _Team
является признаком, его можно смешать в:
new RosterController with _Team
Но поскольку вы не объясняете, что вы на самом деле пытаетесь сделать, трудно сказать наверняка! RosterController
также параметризован?
<Ч />
EDIT - из приведенных ниже комментариев кажется, что вы задаетесь вопросом о том, что выводит компилятор как тип результата выражения, где это выражение является оператором match
.
Вот полезный пример того, как компилятор может сделать действительно много интересных вещей
scala> class Bar; class Baz; trait Foo
defined class Bar
defined class Baz
defined trait Baz
Теперь давайте создадим выражение соответствия:
scala> def foo(s: String) = s match {
| case "a" => new Baz with Foo
| case _ => new Bar with Foo
| }
foo: (s: String)ScalaObject with Foo
Итак, компилятор правильно сделал вывод Foo
здесь. Возможно, вы могли бы перефразировать ваш вопрос, указав в REPL примере , что именно вы ожидаете и чем это отличается от того, что на самом деле происходит.