Я хочу реализовать бесконечный список:
abstract class MyList[+T]
case object MyNil extends MyList[Nothing]
case class MyNode[T](h:T,t: => MyList[T]) extends MyList[T]
//error: `val' parameters may not be call-by-name
проблема в call-by-name
не допускается.
Я слышал, что это связано с тем, что параметр конструктора val
или var
не разрешен для call-by-name
. Например:
class A(val x: =>Int)
//error: `val' parameters may not be call-by-name
Но противоречие состоит в том, что параметр нормального конструктора все еще val
, несмотря на private
. Например:
class A(x: =>Int)
// pass
Итак, вопрос:
- Действительно ли проблема о
val
илиvar
?- Если это. Поскольку точкой для вызова по имени является отсрочка вычисления, почему не может быть отложено вычисление (или инициализация)
val
илиvar
?
- Если это. Поскольку точкой для вызова по имени является отсрочка вычисления, почему не может быть отложено вычисление (или инициализация)
- Как обойти класс cass для реализации бесконечного списка?