@ledsun blog

無味の味は佳境に入らざればすなわち知れず

歌うRactor

Ractorで歌ってみましょう。

歌う部分はRactorは関係ありません。出落ちです。 Ractor内で、spawnしたプロセスをメインスレッドでkillできるか確認します。

非同期なspawn関数をRactor内で実行する必要があるのかは知りません。

完成形

LYRICS =<<FIN
ちょうちょう ちょうちょう 菜の葉にとまれ
菜の葉にあいたら 桜にとまれ
桜の花の 花から花へ
とまれよ遊べ 遊べよとまれ
FIN
.gsub("\n", ' ')
.freeze

pid = Ractor.new { spawn "say #{LYRICS}" }.take

sleep 10

Process.kill 9, pid

pidは数値なので、Ractorと共有可能です。

共有可能なオブジェクト

文字列は共有可能なオブジェクトではありません。 Ractorから参照するとNameErrorが起きます。 freezeして共有可能なオブジェクトにします。