簡體   English   中英

了解做結束塊里面的紅寶石語法

[英]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 ; 結果將是一個新數組。

{}分隔,可以用doend表示在單獨的行上:

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.

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