るりまサーチ

最速Rubyリファレンスマニュアル検索!
22件ヒット [1-22件を表示] (0.033秒)
トップページ > クエリ:Enumerator[x] > クエリ:end[x] > 種類:クラス[x]

別のキーワード

  1. enumerator each
  2. each enumerator
  3. enumerator with_index
  4. enumerator with_object
  5. enumerator new

ライブラリ

検索結果

Enumerator (38031.0)

each 以外のメソッドにも Enumerable の機能を提供するためのラッパークラスです。 また、外部イテレータとしても使えます。

...を元にして定義されます。
Enumerator
を介することにより String#each_byte のような
異なる名前のイテレータについても each と同様に Enumerable の機能を利用できます。

Enumerator
を生成するには Enumerator.newあるいは
Object#to_enum, Objec...
...m_for を利用します。また、一部の
イテレータはブロックを渡さずに呼び出すと繰り返しを実行する代わりに
enumerator
を生成して返します。

=== 注意
外部イテレータとしての機能は Fiber を用いて実装されているため Fiber と...
...ます。
例えば以下のようなスレッドをまたいだ呼び出しはエラーになります。

//emlist[例][ruby]{
a = nil
Thread.new do
a = [1, 2, 3].each
a.next
end
.join

p a.next
#=> t.rb:7:in `next': fiber called across threads (FiberError)
# from t.rb:7:in `<main>'
//}...

Fiber (55.0)

ノンプリエンプティブな軽量スレッド(以下ファイバーと呼ぶ)を提供します。 他の言語では coroutine あるいは semicoroutine と呼ばれることもあります。 Thread と違いユーザレベルスレッドとして実装されています。

...外が伝播します。

//emlist[例:][ruby]{
f = Fiber.new do
raise StandardError, "hoge"
end


begin
f.resume # ここでも StandardError が発生する。
rescue => e
p e.message #=> "hoge"
end

//}

=== ショートチュートリアル

ファイバーは処理のあるポイントで...
...= Fiber.new do
n = 0
loop do
Fiber.yield(n)
n += 1
end

end


5.times do
p f.resume
end


#=> 0
1
2
3
4
//}

以下は内部イテレータを外部イテレータに変換する例です。
実際 Enumerator は Fiber を用いて実装されています。

//emlist[...
...例:][ruby]{
def enum2gen(enum)
Fiber.new do
enum.each{|i|
Fiber.yield(i)
}
end

end


g = enum2gen(1..100)

p g.resume #=> 1
p g.resume #=> 2
p g.resume #=> 3
//}

=== 注意

Thread クラスが表すスレッド間をまたがるファイバーの切り替えはできませ...