Pregunta

Estoy atrapado en el trabajo con una computadora bloqueada.Pero estoy intentando practicar mi Scala.Estoy usando Ideone.com porque ni siquiera puedo instalarlo. scalac...

De todos modos esto no es compilar:

class DPt(var name: String, var x: Double, var y: Double){

        def print = println("DPt; name: " + name + " x: " + x + " y: " + y)
}


object Main {
  def main(args: Array[String]) {
        val pt0 = new DPt("Joe", 1.0, 1.0)
        println("checking generated accessor: " + pt0.x)
        pt0 print
        pt0.x_=(3.0)
        pt0 print
  }
}

Recibo este mensaje del compilador Scala de Ideone.com:

Main.scala:12: error: Unit does not take parameters
    pt0 print
            ^
one error found
spoj: The program compiled successfully, but Main.class was not found.
      Class Main should contain method: def main(args: Array[String]).

Sin embargo, cuando agrego punto y coma al final de las declaraciones, así:

class DPt(var name: String, var x: Double, var y: Double){

        def print = println("DPt; name: " + name + " x: " + x + " y: " + y)
}


object Main {
  def main(args: Array[String]) {
        val pt0 = new DPt("Joe", 1.0, 1.0);
        println("checking generated accessor: " + pt0.x);
        pt0 print;
        pt0.x_=(3.0);
        pt0 print;
  }
}

Creo que la notación infija y postfija en Scala es IMPRESIONANTE, Pero debo estar perdiendo algo.¿Por qué Scala no considera que el final de la línea sea el final de la declaración?


El segundo cartel de este blog parece tener la respuesta.La gente de Scala debería ocuparse de esto.Que molestia....Aunque esta es la primera vez que me encuentro con esto en este hermoso idioma.http://www.scala-lang.org/node/4143

Otra explicación directamente de la documentación:http://docs.scala-lang.org/style/method-invocation.html

¿Fue útil?

Solución

Cuando sueltas el punto, Scala asume que estás usando arg0 operator arg1 sintaxis.Es lo mismo con algo como 1 + 2:Scala supone que un argumento seguirá al operador.

Entonces, se supone que print es un método que toma un argumento y pasa a la siguiente línea buscando uno.Recibes un error porque eso en realidad no funciona: print no requiere discusión.

Al agregar el punto y coma, le está diciendo al compilador que definitivamente no habrá un argumento para el método, por lo que dejará de buscarlo.Esto ayuda al compilador a descubrir que print No necesita argumentos, así que todo está bien.

Para solucionar el problema, simplemente diga pt0.print y estarás bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top