, La clase de caso Scala prohíbe los parámetros de llamada por nombre?
Quiero implementar una lista infinita:
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
el problema es elcall-by-name
No se permite.
He escuchado que es porqueval
ovar
el parámetro constructor no está permitido paracall-by-name
. Por ejemplo:
class A(val x: =>Int)
//error: `val' parameters may not be call-by-name
Pero la contradicción es que el parámetro del constructor normal sigue siendoval
, A pesar deprivate
. Por ejemplo:
class A(x: =>Int)
// pass
Entonces la pregunta:
¿El problema es realmente sobreval
ovar
?Si eso. Dado que el punto de llamar por nombre es diferir el cálculo, ¿por qué no podríaval
ovar
se aplazará el cálculo (o inicialización)?¿Cómo sortear la clase cass para implementar una lista infinita?