В чем разница между классом и классом case в Stream в Scala?

class A(x: Int)
def f(a: A): Stream[A] = a #:: f(new A(a.x + 1))

case class B(x: Int)
def f(b: B): Stream[B] = b #:: f(B(b.x + 1))

Я ожидал, что эти два случая будут выполнять одно и то же действие. Но первый потерпел неудачу с ошибкой (значение x не является членом A). Почему только первое терпит неудачу?


person amaya    schedule 09.06.2014    source источник
comment
Эта проблема не имеет ничего общего с Stream.   -  person wingedsubmariner    schedule 09.06.2014


Ответы (1)


Класс case имеет параметры конструктора, которые автоматически преобразуются в доступные поля. Например, ваш класс B имеет поле x, поэтому B.x допустимо. Ваш класс A не является классом case, поэтому его x не было преобразовано в доступное поле. Если вы хотите, чтобы параметры конструктора класса без регистра были доступны, они должны быть явно отмечены val:

class A(val x: Int)
person wingedsubmariner    schedule 09.06.2014