所以,以爲我高明,我添加了這樣的方法來Object
:有塊紅寶石方法鏈 - 容易混淆不一致的語法錯誤
class Object
def apply_if(cond)
if cond
yield self
else
return self
end
end
end
這(我認爲)讓我有條件位添加到一個方法鏈,它簡化了我的ActiveRecord查詢操作。但是它給出了一個語法錯誤,我可以轉降低到下面的代碼:
data = [1,2,3,4,5]
results = data.
apply_if(true and false) do |q|
q + [0,0]
end
同樣的錯誤:
results = data.apply_if(true and false){|q| q + [0,0]}
但這個工程:
results = data.apply_if ((true and false)) {|q| q + [0,0]}
一樣:
results = data.apply_if (true && false) {|q| q + [0,0]}
我明白了這與運算符優先級有什麼區別,但運算符在一對括號內的優先級怎麼重要?
爲什麼這裏有語法錯誤?我沒有看到任何可能的語法歧義,並且此方法在形狀上與Array#reduce方法相同。
我在這裏試過了一些組合 - 顯式的塊參數與調用,方法定義中的各種顯式優先級。使用lambda而不是塊可以很好地工作,但顯然太笨重以至於無法用於我的目的。
Dude,Eric。我沒有教你更好嗎?這個代碼拼命地爲三元運算符喊出來! :) –
我原來(也可能再次)寫它也接受條件位置(以對象爲參數的位置)的一個proc,它看起來最清潔的是3分支條件。我使用三元組,我喜歡! – nevinera