arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map {|n| n 1}
arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map {|n| n = 1}
這些都回傳[2, 3, 4, 5, 6, 7, 8, 9, 10, 11],但我不明白使用 或 =在地圖陣列中的區別。為什么我要使用其中一個?
uj5u.com熱心網友回復:
在大多數情況下,在 ruby?? 中會回傳最后一個運算式。
在塊內(在這兩種情況下)您只有一個運算式,這將是每個專案的結果。
一個運算式是n 1,這將是1 1, 2 1, 3 1, 等等
另一個運算式是,n = 1這將是n = n 1, n = 1 1,n = 2 1n = 3 1
同樣的結果,但在第二個你做了一個額外的任務
第一個運算式n 1在某種程度上更有效,因為您不會再次將值分配給n
如果您需要在塊內部進行其他操作,第二個運算式n =1可能很有用n
uj5u.com熱心網友回復:
沒有區別,因為只有map塊內的回傳值很重要。你可以做你喜歡做的事,n但如果你回傳別的東西,這才是最重要的:
>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map {|n| n = 1; 1} # return 1 for everything
=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
例如,如果 n 為 1 n = 1,則n 1兩者都回傳2,因此沒有區別。
然而,它在map塊內很重要:
>> [1].map {|n| n 10; n} # ` ` does not change `n`
=> [1]
>> [1].map {|n| n = 10; n} # ` =` does change `n`
=> [11]
uj5u.com熱心網友回復:
Array#map 函式遍歷 Array 并為它自己的范圍內的每個元素執行一次塊。每次執行 n = 1 時,Array#map 首先將 n 的值設定為被映射的元素。它不會為后續迭代保留或累積。
如果您想故意累積,則必須在塊外的變數中添加一些內容。
irb(main):001:0> a = 0
=> 0
irb(main):002:0> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map {|n| a = n }
=> [1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
irb(main):003:0> a
=> 55
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/479269.html
上一篇:redmine安裝失敗,ruby3.0.4,mysql2(0.5.4)“未定義方法'split'”“找不到rb_enc_interned_str”
