簡體   English   中英

Ruby - 使用&&時的意外行為

[英]Ruby - unexpected behaviour when using &&

當我寫下面這一行時:

if (collection.respond_to? :each && collection.respond_to? :to_ary)

我的IDE(Aptana Studio 3)給了我以下錯誤: , unexpected tSYMBEG

但是如果我添加括號,錯誤就會消失:

if ((collection.respond_to? :each) && (collection.respond_to? :to_ary))

或更改&& and

if (collection.respond_to? :each and collection.respond_to? :to_ary)

任何想法為什么會這樣? 另外, && and ?有什么區別?

謝謝

&&具有高的優先級 (強於and比,更強= )。

foo = 3 and 5 # sets foo = 3
foo = 3 && 5  # sets foo = true

它也比模糊函數調用更強大。 您的代碼將被解析

 if (collection.respond_to? :each && collection.respond_to? :to_ary)
 if (collection.respond_to? (:each && collection.respond_to?) :to_ary)

這沒有任何意義。 使用and解析時

 if (collection.respond_to? :each and collection.respond_to? :to_ary)
 if (collection.respond_to?(:each) and collection.respond_to?(:to_ary))

我建議你使用這個(因為它不依賴於運算符優先級規則和使用最少的牙套,具有最短的大括號的距離,和用途and其往往是可以找到if不是條件&& ):

 if collection.respond_to?(:each) and collection.respond_to?(:to_ary)

因為Ruby是一種動態語言,所以ruby無法知道你是否使用符號作為整數(存儲它們),因此'&&'運算符優先於函數調用,因此你實際上是在調用

collection.respond_to? (:each && collection.respond_to? :to_ary) collection.respond_to? (:each && collection.respond_to? :to_ary)而不是調用

(collection.respond_to? :each) and (collection.respond_to? :to_ary)

這是方法調用然后一個布爾邏輯運算符。 當使用'和'代替&&時,'和'具有更低的先行(低於函數調用),因此它也有效。

'和'和'或'vs'&&''||'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM