本文簡要介紹ruby語言中 Object.to_enum
的用法。
用法
to_enum(method = :each, *args) → enum
to_enum(method = :each, *args) {|*args| block} → enum
也別名為:enum_for
創建一個新的 Enumerator
,它將通過在 obj
上調用 method
來枚舉,如果有的話,傳遞 args
。 yielded
通過方法變成了枚舉數的值。
如果給出了一個塊,它將用於計算枚舉器的大小,而無需對其進行迭代(參見 Enumerator#size
)。
例子
str = "xyz"
enum = str.enum_for(:each_byte)
enum.each { |b| puts b }
# => 120
# => 121
# => 122
# protect an array from being modified by some_method
a = [1, 2, 3]
some_method(a.to_enum)
# String#split in block form is more memory-effective:
very_large_string.split("|") { |chunk| return chunk if chunk.include?('DATE') }
# This could be rewritten more idiomatically with to_enum:
very_large_string.to_enum(:split, "|").lazy.grep(/DATE/).first
在為泛型 Enumerable
定義方法時,通常會調用 to_enum
,以防不傳遞任何塊。
這是一個這樣的示例,帶有參數傳遞和大小調整塊:
module Enumerable
# a generic method to repeat the values of any enumerable
def repeat(n)
raise ArgumentError, "#{n} is negative!" if n < 0
unless block_given?
return to_enum(__method__, n) do # __method__ is :repeat here
sz = size # Call size and multiply by n...
sz * n if sz # but return nil if size itself is nil
end
end
each do |*val|
n.times { yield *val }
end
end
end
%i[hello world].repeat(2) { |w| puts w }
# => Prints 'hello', 'hello', 'world', 'world'
enum = (1..14).repeat(3)
# => returns an Enumerator when called without a block
enum.first(4) # => [1, 1, 1, 2]
enum.size # => 42
相關用法
- Ruby Object.instance_variable_get用法及代碼示例
- Ruby Object.display用法及代碼示例
- Ruby Object.remove_instance_variable用法及代碼示例
- Ruby Object.define_singleton_method用法及代碼示例
- Ruby Object.methods用法及代碼示例
- Ruby Object.public_send用法及代碼示例
- Ruby Object.xmp用法及代碼示例
- Ruby Object.singleton_methods用法及代碼示例
- Ruby Object.enum_for用法及代碼示例
- Ruby Object.freeze用法及代碼示例
- Ruby Object.inspect用法及代碼示例
- Ruby Object.obj ==用法及代碼示例
- Ruby Object.method用法及代碼示例
- Ruby Object.DelegateClass用法及代碼示例
- Ruby Object.instance_of?用法及代碼示例
- Ruby Object.nil?用法及代碼示例
- Ruby Object.instance_variable_defined?用法及代碼示例
- Ruby Object.singleton_class用法及代碼示例
- Ruby Object.kind_of?用法及代碼示例
- Ruby Object.send用法及代碼示例
- Ruby Object.itself用法及代碼示例
- Ruby Object.__id__用法及代碼示例
- Ruby Object.is_a?用法及代碼示例
- Ruby Object.instance_variable_set用法及代碼示例
- Ruby Object.extend用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Object.to_enum。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。