2011-06-10 9 views
5

Scala newbie quiL'aggiunta di spazi all'operatore + in Scala dà risultati diversi?

Cercando

(1). + (2) restituisce un valore Int 3, finora tutto bene
ma
1. + (2) restituisce un valore Double di 3.0 .

Ma se lo si fa
1. + (2) restituisce un valore Int pari a 3.
Nota: l'unica differenza tra questo e il precedente è lo spazio dopo "1"

Gli spazi sono importanti in Scala? Im più curioso di sapere come 1. + (2) ha restituito un Double come sembra aver analizzato 1. come Double e poi ha aggiunto "2" ad esso.

+2

Si colpisce il chiodo sulla testa, '1. + (2)' è un doppio perché '1.' è un doppio e' double + int' restituisce un doppio per preservare la precisione. L'aggiunta di uno spazio dopo il '1' significa che il primo operando di' + 'non viene analizzato come un doppio, quindi l'operazione è' int + int' - restituendo un int. – SubmittedDenied

+0

grazie, era solo confuso/sorprendente che gli spazi potessero avere importanza in scala. – rajasaur

+0

'1.' è un singolo token, quindi mettere sempre uno spazio tra' 1' e '.' avrà sempre importanza. 'val y = sin x' è diverso da' val y = sinx' anche –

risposta

11

1. + (2) chiama il metodo + sul Double "1.". Questo è un riporto dalla sintassi Java, dove "1." è equivalente a 1.0.

+0

Per interessi, sai cosa '1. + (2) 'analizza a? '.' viene silenziosamente ignorato? – SubmittedDenied

+3

In tal caso, il punto viene utilizzato per invocare il metodo + su 1. Ecco un altro esempio di utilizzo di spazi bianchi dopo. e prima del nome del metodo: val nums = 1 :: 2 :: Nil; nums. reverse – mpilquist

+0

@SubmittedDenied: pensatelo come 'ONE.plus (TWO)'. –

Problemi correlati