6.61. kink/io/GENERATOR_INPUT

6.61.1. GENERATOR_INPUT.new($generator)

newは、そのバイト列が、$generatorの呼び出しの中でoutputに書き込まれることで渡されるようなinputを戻す。

例

バイト列を渡す

In.readが初めて呼ばれると、outputを引数として$generatorが呼ばれる。

$generatorの呼び出しの中でOut.writeが呼ばれると、$generatorの呼び出しは中断されて、バイト列がinputに渡される。

inputがもっとバイト列を要求すると、$generatorの呼び出しが再開される。

$generatorの呼び出しが戻すと、inputはEOFに達する。

inputを閉じる

newが作ったinputは、CONTROL.with_finallyを使って閉じることが推奨される。これは、$generatorの中の終了処理が適切に行われるようにするためである。

inputがIn.readよりも前に閉じられた場合、またはEOFに到達したあとに閉じられた場合、inputは単に閉じた状態にされる。

中断された$generatorの呼び出しがある状態でinputが閉じられた場合、その呼び出しは再開される。現在および後続するOut.writeの呼び出しはIOエラーになる。

$generatorが投げた例外

$generatorが例外を投げた場合、現在および後続するIn.readの呼び出し、または現在のIn.closeの呼び出しはIOエラーになる。

outputは閉じない

$generatorに渡されるoutputは閉じるべきでない。Out.closeは常にIOエラーになる。

事前条件

$generatorは、outputを取る関数でなければならない。