2015-06-11 3 views
0

Рассмотрим фрагмент кодаПовторное использование переменных в базовом классе в производном классе: Scala

trait MyTrait{ 
val x: Int = 0 
} 
case class MyClass(y: Int = 1, z: Int = 2) extends MyTrait 
//script starts now 
val myClass = MyClass(3,4) 
myClass.copy(x, 5) 

Почему это не работает? В нем указана неопределенная переменная x. Я знаю, что это может быть написано как

case class MyClass(override val x:Int = 0, y: Int = 1, z: Int = 2) extends MyTrait 

Но я хочу знать, почему я не могу использовать значения по умолчанию?

EDIT

В таком случае это невозможно установить переменную х MyTrait в?

+0

Пожалуйста, укажите причину downvoting вопрос, так что я могу улучшить его в будущем. – Sohaib

+0

'myClass.copy (x, 5)' Что вы ожидаете от этого? Сделайте копию и установите x на 5? Прямо сейчас, если бы существовал x в области видимости, он бы установил y на значение этого x и z до 5. –

+0

@Paul Да, это было намерением. Я просто изучаю scala. Итак, из-за этого дизайна мы не можем фактически установить x сейчас? – Sohaib

ответ

1

Там нет x, есть только член x признака MyTrait (и ваш класс MyClass).

Так что это может делать то, что вы хотите:

myClass.copy(myClass.x, 5) 
+0

Понял. Благодаря! – Sohaib

3

x нет в наличии если сделаете myClass.copy(x, 5). Вы определили x внутри свойства, но x вы набрали в выражении myClass.copy(x,5) не то же самое x внутри черты. Следовательно, компилятор жалуется, что не нашел значение x в myClass.copy(x,5).

+0

Получил. Фактически, х был написан вокруг множества других функций, которые я удалил. Благодаря! – Sohaib

Смежные вопросы