tutorial software renault fungicida examples constructora blanquerna scala

software - ¿Por qué este código Scala con asignación de un valor en un parámetro funciona?



scala tutorial (1)

object Main { def main(args: Array[String]) { val x = 10 print(x="Hello World") print(x) } }

salida: Hello World10

Como sabemos, en Scala un val no puede ser reasignado o cambiado, pero aquí x está cambiando a

Hola Mundo

mientras se imprime.


La explicación es algo inesperada: la print tiene un parámetro llamado x . Usar x = ... usa el argumento nombrado , por lo tanto, print(x="Hello World") es lo mismo que print("Hello World") .

Ver Scala Predef docs o Predef.scala fuente:

object Predef /*....*/ { /*....*/ def print(x: Any) = Console.print(x) /*....*/ }

Nota: esto ya se discutió en la lista de correo interna de Scala :

Scala actualmente intenta ser inteligente al tratar a "x = e" como un argumento con nombre o una asignación ... Esto puede sorprender al usuario ...

Propuesta: desaprobamos las asignaciones en listas de argumentos.

También existe un problema SI-8206 para esto, el cambio probablemente se implementó en el problema 426 para Scala 2.13.

Su código todavía se compilará después de la desaprobación, con el mismo significado. El cambio será que nadie (al menos nadie suficientemente familiarizado con las especificaciones / implementación del idioma) debe esperar que se interprete como una asignación.