Я бы сказал, что класс «with» может принимать аргументы.

тина Одерскогонедавний пост об уровнях способности программиста в Скале, вЭкспертный дизайнер библиотеки раздел, он включает в себя термин"ранние инициализаторы".

Они не упомянуты вПрограммирование в Scala, Кто они такие?

 Knut Arne Vedaa18 янв. 2011 г., 21:11
Они описаны в разделе 20.5 «Программирование в Scala», но называются «предварительно инициализированными полями».

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

Решение Вопроса

который предназначен для запуска перед его суперклассом. Например:

abstract class X {
    val name: String
    val size = name.size
}

class Y extends {
    val name = "class Y"
} with X

Если код был написан вместо

class Z extends X {
    val name = "class Z"
}

тогда исключение нулевого указателя произойдет, когдаZ получил инициализацию, потому чтоsize инициализируется раньшеname в обычном порядке инициализации (суперкласс перед классом).

 nadavwr04 мая 2013 г., 20:12
Каким образом это предпочтительнее, чем неуклюжеdef nameInit: String; val name = nameInitпереопределеноdef nameInit = "foo"?
 Daniel C. Sobral08 мая 2013 г., 00:37
@nadavwr Adef будет переопределено таблицей методов класса, гарантируя, что будет выполнена самая конкретная версия, тогда как дляval инициализация - то, что переопределяется, является получателем, а не инициализацией.

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