我正在處理一個項目,其中有幾個我不熟悉的以下模式的實例。我不知道該怎麼稱呼它,所以我找不到任何文檔。以下是什麼概念?有條件的紅寶石分配
if [email protected] = [nil, 2].sample
puts 'there was an error'
else
puts @two
end
感謝
我正在處理一個項目,其中有幾個我不熟悉的以下模式的實例。我不知道該怎麼稱呼它,所以我找不到任何文檔。以下是什麼概念?有條件的紅寶石分配
if [email protected] = [nil, 2].sample
puts 'there was an error'
else
puts @two
end
感謝
它基本上斜靠在Ruby的falsy對象:nil
和false
。
在Ruby中,除nil
和false
之外的所有內容都被稱爲truthy。
因此,在例如其打印的@two
值,如果它是truthy(2),否則(nil
)它則輸出錯誤消息。
我不認爲這個「概念」有一個名字。
「如果真的是真的......」這是否意味着如果右側的任務是真的? –
@JoeEssey你在這兩種情況下抨擊'@ two'。這是分配的值的問題 - 真理('2')或者虛假('nil') –
這裏沒有什麼特別,它是等效於:
@two = [nil, 2].sample
if [email protected]
puts 'there was an error'
else
puts @two
end
@two = [nil, 2].sample
從[nil, 2]
返回一個隨機元素,即或者nil
或2
,並將其分配給該實例變量@two
。
條件應該是不言自明的。
使用條件賦值表達式的值並沒有真正有一個名本身,而是包裹在括號中分配的做法稱爲"Safe assignment in condition",這是你應該採取,如果事情的做法你正在編寫這樣的代碼。
這就是我正在尋找的東西。我測試了它,它工作,但它似乎剛剛關閉。很高興看到風格指南解決這個問題。 –
請儘量避免雙重否定。將其轉化爲一個積極的測試,並且顛倒「puts」語句的順序會使這更加明智。如果你不小心,最終可能會出現三重和四重底線,這些都是真正的頭腦風暴。 – tadman
這是可怕的代碼。除了@ tadman的評論之外,這還不是很清楚:'@two = [nil,2] .sample;放@two? @two:「出現錯誤」。 –
更好的辦法是編寫一個類似'def coin_flip; [:heads,:tails] .sample; end'然後是'if(coin_flip ==:heads)',它表達了更多這裏發生的事情。 – tadman