コンテンツへスキップ

select

select 式は、一連のブロッキング操作から選択し、最初に利用可能になった分岐に進みます。

構文

式はキーワード select で始まり、その後に1つ以上の when 分岐のリストが続きます。各分岐には、条件と本体があり、文の区切りまたはキーワード then で区切られています。オプションで、最後の分岐は else (条件なし) にすることができます。これは select アクションがノンブロッキングであることを示します。式は end キーワードで閉じられます。

注意

select は、すべての分岐が潜在的にブロッキング操作を参照する caseに似ています。

各条件は、select アクションの呼び出し、または右辺が select アクションの呼び出しである代入のいずれかです。

select
when foo = foo_channel.receive
  puts foo
when bar = bar_channel.receive?
  puts bar
when baz_channel.send
  exit
when timeout(5.seconds)
  puts "Timeout"
end

Select アクション

select アクション呼び出しは、暗黙の接尾辞 _select_action を持つメソッド、または ? 接尾辞を持つ呼び出しの場合は _select_action? を呼び出します。このメソッドは select アクションのインスタンスを返します。

select 式は、各分岐に関連付けられた select アクションを開始します。いずれかがすぐに戻った場合は、それを使用して続行します。それ以外の場合は、完了を待ちます。1つの分岐が完了するとすぐに、他のすべてがキャンセルされます。 else 分岐はすぐに完了するため、待機することはありません。

実行は完了した分岐で続行します。分岐条件が代入の場合、select 呼び出しの結果がターゲット変数に代入されます。

標準ライブラリの Select アクション

標準ライブラリは、次の select アクションを提供します