2011-06-10 11 views
5

Scala novato aquíAgregar espacios al operador + en Scala da resultados diferentes?

Tratando

(1). + (2) devuelve un valor int de 3, hasta ahora tan bueno
pero
1. + (2) devuelve un valor doble del 3,0 .

Pero si lo haces
1. + (2) devuelve un valor Int de 3.
Nota: La única diferencia entre esto y el anterior es el espacio después del "1"

¿Los espacios importan en Scala? Tengo más curiosidad sobre cómo 1. + (2) devolvió un doble ya que parece que analizó 1. como un doble y luego agregó "2" a él.

+2

Golpeas el clavo en la cabeza, '1. + (2)' es un doble porque '1.' es un doble y' double + int' devuelve un doble para conservar la precisión. La adición de un espacio después del '1' significa que el primer operando a' + 'no se analiza como un doble, por lo que la operación es' int + int' - devolviendo un int. – SubmittedDenied

+0

gracias, era simplemente confuso/sorprendente que los espacios pudieran importar en Scala. – rajasaur

+0

'1.' es un token único, por lo que poner un espacio entre el' 1' y el '.' siempre será importante. 'val y = sin x' es diferente de' val y = sinx' también –

Respuesta

11

1. + (2) está llamando al método + en el Doble "1.". Este es un arrastre de la sintaxis de Java, donde "1" es equivalente a 1.0.

+0

Fuera de interés, ¿sabes qué '1. + (2) 'analiza a? ¿El '.' se ignora silenciosamente? – SubmittedDenied

+3

En ese caso, el punto se usa para invocar el método + en 1. Aquí hay otro ejemplo del uso de espacios en blanco después. y antes del nombre del método: val nums = 1 :: 2 :: Nil; nums. inversa – mpilquist

+0

@SubmittedDenied: piense en ello como 'ONE.plus (TWO)'. –

Cuestiones relacionadas