2016-01-21 19 views
5

Questo va bene:Perché "restituisci a o b" un errore di espressione del valore void in Ruby?

def foo 
    a or b 
end 

Questo è anche bene:

def foo 
    return a || b 
end 

Questo restituisce void value expression:

def foo 
    return a or b 
end 

Perché? Non viene nemmeno eseguito; fallisce il controllo della sintassi. Cosa significa ""?

+0

Questo non è un duplicato. Ho rimosso tutto il riferimento all'operatore '||' e la domanda rimane valida. Per favore riaprire – Shelvacu

+0

Si prega di non modificare la domanda per invalidare le risposte. http: //meta.stackoverflow.com/questions/290297/how-much-change-to-the-question-is-too-much \ –

+0

@MsYvette Mi dispiace, avrei dovuto tenerne conto. Tuttavia, spero che possa ancora mostrare che la domanda è contrassegnata come un duplicato di non risponde alla mia domanda. – Shelvacu

risposta

6

return a or b viene interpretato come (return a) or b, e quindi il valore di return a è necessario calcolare il valore di (return a) or b, ma poiché return non lascia mai un valore in luogo (perché sfugge da quella posizione), non è progettato per restituire un valore valido nella posizione originale. E quindi l'intera espressione viene lasciata con (some_void_value) or b ed è bloccata. Questo è ciò che significa.

2

Semplicemente perché or ha lower precedence di || che significa return a verranno eseguiti prima or b, or b è quindi irraggiungibile