2015-10-09 61 views
5

È semplicissimo da risolvere; semplicemente rendilo return nil, ma perché il non funziona con il mio codice senza quella linea?Perché il mio codice stampa solo una volta?

function x(bool) 
    if bool then 
     return "!" 
    end 
end 

print(x(true), x(false), x(false)) 

Ciò che lo rende ancora più confusa, è che stampa sempre il nil, tutte le volte che io chiamo x(false) sottrarre 1.

io non riesco a avvolgere la mia avanti intorno perché questo sta accadendo.

+2

Numero di valori restituiti da una chiamata di funzione PRIMA che COMMA sia regolato su uno, il numero di valori dell'ultima chiamata non viene regolato. Quindi, hai i valori '1 + 1 + 0' stampati –

risposta

6

The manual dice:

Se il controllo raggiunge la fine di una funzione senza incontrare una dichiarazione return, allora la funzione restituisce senza risultati.

Nota che la restituzione di nessun risultato è diversa dalla restituzione di nil.


In questa chiamata:

print(x(true), x(false), x(false)) 

sia x(false) restituisce nulla, però, tutti tranne l'ultimo elemento sono sempre regolato a esattamente un risultato.

Di solito vediamo chiamate di funzioni che restituiscono uno o più risultati vengono lasciati solo con il primo. Qui nessun risultato viene compilato anche con nil.

+0

Non capisco perché non stampi solo"! " Poi? E perché non 2 nils? – warspyking

+0

@warspyking, come ha detto @YuHao, l'ultima funzione non stampa 'nil', perché non restituisce' nil' (non restituisce invece nulla). Il risultato della penultima funzione è mostrato come 'nil', perché anche se non restituisce nulla (come l'ultima funzione), il risultato è * regolato * su' nil' per mantenere il numero corretto di risultati. Cambia questo a 'x (vero), x (falso), 1'; vorresti che il risultato fosse '"! ", nil, 1' e non' "!", 1', giusto? –

+0

@Paul Suppongo che sia vero, ma se vuole "mantenere il numero corretto di risultati" perché l'ultimo non si aggiusta? – warspyking