2014-02-06 88 views
0

運營商的我在紅寶石試過這樣的代碼「(而對不起,我不知道正確的術語),所以Ruby本質上看到了這樣的說法:優先紅寶石

if (object && object.is?) ball 
    object.throw! 
end 

這是沒有意義的,所以語法錯誤是有序的。

這是事實,這並進一步支持工作:

if object and object.is? ball 
    object.throw! 
end 

我相信這是因爲「和」操作符比& &優先級較低,所以一個函數調用的「優先級」。必須介於& &和'和'之間。

但是,在我以前見過的優先順序表中,函數調用沒有列出。

我希望能夠對這裏發生的一些事情有所瞭解,也許可以參考一下ruby規範。我不是在表達分辨率的專家,我更多地瞭解的過程,問題和理論背後,無疑是一個更廣泛的話題

+0

* [內置到Ruby的優先級,可以覆蓋(HTTP://www.techotopia。 com/index.php/Ruby_Operator_Precedence)通過用圓括號包圍表達式的低優先級部分* so,'object && object.is? ball'可以作爲'object &&(object.is?ball)'。 –

回答

0

由於運算符優先級的這個例子只是感興趣,就應該把做:

if object && (object.is? ball) 

if object && object.is?(ball) 

原因是 「& &」 和 「||」具有比「和」和「或」更高的優先級。因此,如果你不用括號來表示後者「object.is?ball」,「object.is?」將首先被「& &」抓住。但是,如果您使用「和」無括號,它工作得很好,因爲它在這種情況下,最低優先級:

if object and object.is? ball