[英]understanding ruby syntax inside do end block
我最近開始學習ruby,當我看到以下代碼行時,我正在做一些涉及數組的研究:
array.map!{ |i| i.is_a?(Integer) ? (i + number) : i }
我正在嘗試概念化並更好地理解該行各部分的含義。 有人可以解釋我將如何使用do end而不是{}來寫出來嗎,以及“”是什么嗎? 之后(整數)和(i +數字)之后的“:”字樣是什么意思? 非常感謝!
{}
與do / end和?
完全相同?
和:
就像if / else塊一樣工作,因此代碼也可以寫成
array.map! do |i|
if i.is_a?(Integer)
i + number
else
i
end
end
array.map! { |i| i.is_a?(Integer) ? (i + number) : i }
.map!
是Ruby中用於Array
類型的方法。 它說根據給定的block參數映射數組的每個元素 。 Ruby中的塊參數接受其自己的參數(用|...|
分隔),因此您可以傳入有問題的數組元素的值。 在這種情況下, |i|
給了一個塊變量i
,它代表要評估的array
當前元素的值。
結果將是具有相同數量元素的數組,但是每個元素都是原始數組array
每個對應元素的映射結果。 解釋點( !
)表示用結果替換 array
元素,而不是用結果返回新數組。 您也可以執行array.map {...
這將產生相同的結果,但不會更改 array
; 結果將是一個新數組。
該塊用{}
分隔,可以用do
和end
表示在單獨的行上:
array.map! do |i|
i.is_a?(Integer) ? (i + number) : i
end
使用{}
和do-end
行為沒有區別。
?:
是三元if-then-else ,就像在C中一樣exp1 ? exp2 : exp3
exp1 ? exp2 : exp3
說, 如果exp1
為真,則執行exp2
否則執行exp3
。 那么,以上等同於:
array.map! do |i|
if i.is_a?(Integer) then
i + number
else
i
end
end
在這兩種情況下,IF-THEN-ELSE表達式的值是在已采取的分支執行的最后一個語句的值。 然后,返回結果以執行給定元素i
的塊。 因此,整個映射的結果是用其索引加上任何number
(希望也是數字類的變量)替換數組中屬於Integer
類的每個元素。 如果該元素不是Integer
,則僅用其索引替換它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.