類似于,在 Ruby 中,你可以做
[1, 2, 3].each.with_index { |num, index| }
我想鏈接它以添加對頂級陣列的參考,而不必在塊之前將所述陣列分配給不同的變數,如下所示:
[1, 2, 3].each.with_index.with_self { |num, index, array| }
是否存在這樣的方法,或者除了具有頂級變數集的明顯方法之外的任何替代方法?
我的具體案例是一個 Ruby 腳本,我想盡可能多地閱讀它。我有一個帶行的輸入檔案,我正在像這樣讀取檔案:
STDIN.each_line.with_index
而且還需要反向參考原來的“陣列”,但是因為each_line陣列變成了一個列舉器。我當然可以分解它并決議各個部分,但要盡量保持腳本簡潔。這with_self將是完美的,但它似乎不存在。??
uj5u.com熱心網友回復:
您正在尋找Object#tap:
[1, 2, 3].tap { |a| a.each_with_index { |num, index| ... }
從列舉器到陣列:
STDIN.each_line.to_a
要不就
STDIN.readlines
最后:with_self如果在 , 之后each_with_index,您的 a 想法不起作用,因為self它將成為另一個 Enumerator 而不是您正在尋找的 Array。
編輯:查看 Cary 的答案,了解如何根據自己的意愿彎曲 Ruby。:-)
uj5u.com熱心網友回復:
您可以按如下方式執行此操作。
module Enumerable
def with_self
arr = to_a.map(&:first)
loop { yield [*self.next, arr] }
end
end
[1, 2, 3].each.with_index.with_self { |n,i,arr| puts [n,i,arr] }
#=> [1, 0, [1, 2, 3]]
# [2, 1, [1, 2, 3]]
# [3, 2, [1, 2, 3]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/389844.html
標籤:红宝石
