2015-08-10 12 views

risposta

14

Risposta breve: non c'è motivo di utilizzare ? nel tuo caso.

Risposta lunga: ? ha un significato diverso - è implies nullability, il che significa che avvolge tipi di base (Int, Float, Bool) in Null<T> per assicurarsi che essi sono annullabili anche su bersagli statici (su obiettivi dinamici come JavaScript e Neko, questi sono nullable in entrambi i casi). Se si dispone di un argomento di tipo Int, i due seguenti sono equivalenti:

function f(i:Null<Int> = null) 
function f(?i:Int) 

Ora, se inoltre aggiunge una default value al vostro tipo di optional, tale valore verrà utilizzato anche se si passa null:

class Test { 
    static function main() { 
     f(); // 12 
     f(null); // 12 
    } 

    static function f(?i:Int = 12) { 
     trace(i); 
    } 
} 
0

Sono due cose diverse. A? Significa un parametro opzionale Quindi se può essere completamente escluso dalla chiamata di funzione e nessuna sostituzione avrà luogo.

(x: Float = 12) è un parametro predefinito. Significato se è escluso dalla funzione chiama il valore di 12 verrà utilizzato.