2016-01-21 32 views
5

To jest po prostu w porządku:Dlaczego `return a or b` jest błędem wyrażenia wartości pustej w Rubim?

def foo 
    a or b 
end 

Jest również dobrze:

def foo 
    return a || b 
end 

ta zwraca void value expression:

def foo 
    return a or b 
end 

Dlaczego? Nie zostaje nawet stracony; nie sprawdza składni. Co znaczy void value expression?

+0

To nie jest duplikatem. Usunąłem wszystkie odniesienia do operatora '||', a pytanie nadal jest aktualne. Otwórz ponownie. – Shelvacu

+0

Nie edytuj pytania, aby unieważnić odpowiedzi. http: //meta.stackoverflow.com/questions/290297/how-much-change-to-the-question-is-touro- \ –

+0

@MsYvette Przepraszam, powinienem wziąć to pod uwagę. Mam jednak nadzieję, że nadal może wykazać, że pytanie to jest oznaczone jako duplikat, nie odpowiada na moje pytanie. – Shelvacu

Odpowiedz

6

return a or b jest interpretowany jako (return a) or b, a więc wartość return a należy obliczyć wartość (return a) or b, ale ponieważ return nigdy nie opuszcza wartość w miejscu (bo ucieka z tej pozycji), to nie jest przeznaczone do zwróci poprawna wartość w pierwotnej pozycji. I dlatego całe wyrażenie pozostaje z (some_void_value) or b i utknie. To właśnie to oznacza.