2016-01-21 51 views
5

Bu gayet güzel:Niçin Ruby'de bir boş değer ifade hatası a veya b` döndürüyor?

def foo 
    a or b 
end 

Bu aynı zamanda gayet:

def foo 
    return a || b 
end 

Bu void value expression verir:

def foo 
    return a or b 
end 

Neden? İdam edilmiyor bile; sözdizimi denetimi başarısız olur. void value expression ne anlama geliyor?

+0

erişilemiyor yürütülecektir anlamına gelir lower precedence|| daha vardır. Tüm referansı '||' operatörüne kaldırdım ve soru hala geçerli. Lütfen tekrar açınız. – Shelvacu

+0

Lütfen cevaplarınızı geçersiz kılmak için sorunuzu düzenlemeyin. http: //meta.stackoverflow.com/questions/290297/how-much-change-to-the-question-is-too-much \ –

+0

@MsYvette Üzgünüm, bunu hesaba katmalıydım. Ancak, bunun bir kopyası olarak işaretlenmiş sorununun soruma cevap vermediğini gösterebileceğini umuyorum. – Shelvacu

cevap

6

return a or b(return a) or b olarak yorumlanır ve bu nedenle return a değeri (return a) or b değerini hesaplamak için gerekli olduğunu, ancak (o pozisyondan kaçar çünkü) return beri yerinde bir değeri asla terk etmez, bir dönüş tasarlanmamıştır orijinal pozisyonda geçerli değer. Ve böylece tüm ifade (some_void_value) or b ile kaldı ve sıkıştı. Anlamı budur.

2

Basitçe or çünkü return aor b önce or b Bu bir kopya değil bu nedenle