создание вашего TupleTy с помощью «new» (как с обычным классом) работает:
scala> new TupleTy(IntTy(false))
res3: TupleTy = TupleTy(false,WrappedArray(IntTy(false)))
дополнительные конструкторы для классов case необходимо вызывать с помощью «new», потому что (в отличие от конструктора по умолчанию)не переводиться в метод apply объекта-компаньона.Обратите внимание, что «unapply» также не генерируется, поэтому сопоставление с образцом на вашем TupleTy может работать не так, как задумано.
Вот некоторые справочные обсуждения на scala-lang.org о том, почемуКомпилятор scala не был расширен для обработки нескольких конструкторов класса case.
EDIT вы можете создать дополнительное "apply" самостоятельно, если хотите:
object TupleTy {
def apply(elems: Type*) = new TupleTy(false, elems:_*)
}
счто вы можете сделать:
scala> TupleTy(IntTy(false))
res4: TupleTy = TupleTy(false,WrappedArray(IntTy(false)))