2013-07-08 7 views

risposta

27

Il motivo ovvio è di non lasciare le variabili non inizializzate. Nota che nella tua dichiarazione senza inizializzazione, dovrai anche specificare il tipo.

var x: Type; 

dà il seguente errore:

only classes can have declared but undefined members (Note that variables need to be initialized to be defined)

in realtà solo le classi astratte possono dichiarare i membri senza definire. È ancora possibile ottenere il comportamento desiderato (variabili inizializzate ad un valore di default) come

var x: Type = _ 

Se Type è un tipo di riferimento, x sarà null. Questo scenario è utile, ad esempio, nel caso in cui un metodo factory completi l'inizializzazione di un oggetto dopo la costruzione dell'oggetto.

+0

Bella spiegazione del caso 'var'. Dal momento che non è possibile riassegnare identificatori 'val' dopo la dichiarazione, la rimozione di questa restrizione favorirebbe efficacemente la proliferazione di più nomi per' null'. Quale sarebbe male. –

+1

Copia e incolla il tuo esempio con 'var x: Long = _' ma mi dà errore:' Le variabili locali devono essere inizializzate '. C'è ancora bisogno di conoscere i nuovi arrivati ​​di Scala per poter utilizzare la tua soluzione? Ad esempio, poiché l'OP richiede un tipo numerico, quale sarebbe un appropriato 'Tipo' numerico da usare per' x'? – ecoe

+0

Come si può vedere, la notazione 'var ... = _' funzionerebbe solo per i membri della classe e non per le variabili locali. Credo che non ci siano situazioni che giustificano variabili locali non inizializzate. –

Problemi correlati