Я играю со скалой (скала 2.8). Предположим, у меня есть класс с вложенной чертой, и я хочу использовать эту вложенную черту в качестве типа параметра в конструкторе класса. Это вообще возможно? Это самое близкое, что я пришел:
class OuterClass(traitParam:OuterClass#InnerTrait) {
trait InnerTrait { }
val y:InnerTrait = traitParam
}
Без третьей строки, которая даже компилируется, но как только я пытаюсь использовать traitParam
как InnerTrait
, я получаю ошибку компилятора:
несоответствие типов; найдено: OuterClass # InnerTrait требуется: OuterClass.this.InnerTrait.
Я не могу понять, что (если что) я мог бы сделать. Doing
class OuterClass(traitParam:OuterClass.this.InnerTrait)
вместо этого, как может указывать сообщение об ошибке, не компилируется. Есть ли у меня другой выбор, кроме как переместить InnerTrait
за пределы OuterClass
? Если вам интересно, почему я хотел бы сделать это, ответ заключается в том, что в моем реальном коде эквивалент OuterClass
имеет параметры типа, которые затем будут использоваться в InnerTrait
. Если я вывожу его наружу, то мне придется пересчитывать параметры типа каждый раз, когда я ссылаюсь на внутреннюю черту.