【Ruby3.x】IO::ungetc()メソッドの使い方
ungetcメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
ungetcメソッドは、RubyのIOクラスに属し、ストリームから一度読み込んだ1文字を、再びそのストリームの先頭に戻す操作を実行するメソッドです。これは、プログラムがファイルや標準入力などのIOストリームから文字を読み進める際に、必要以上に文字を読み込んでしまった場合に、その文字を「なかったこと」にして、次の読み込みで再び同じ文字が読めるようにする機能を提供します。
例えば、特定の区切り文字を検出するまで文字を読み込み、区切り文字自体は次の処理に回したい、といった状況で非常に役立ちます。ungetcメソッドは引数として、ストリームに戻したい1文字(またはその文字の文字コードを表す整数)を受け取ります。このメソッドを呼び出した後、次にそのIOオブジェクトから文字を読み込むと、ungetcで戻された文字が最初に返されるようになります。
戻せる文字の数は通常1文字に限定されており、複数回呼び出しても最後に呼び出された1文字のみが有効となる点に注意が必要です。成功した場合、引数として渡された文字(または文字コード)を戻り値として返します。ストリームの終端に達している場合や、すべてのIOオブジェクトでこのメソッドがサポートされているわけではないため、利用する際はそのIOストリームの特性を考慮することが重要です。このメソッドは、パーサーや字句解析器の実装など、精密な入力制御が必要な場面で活用されます。
構文(syntax)
1file = File.open("example.txt", "w+") # 読み書きモードでファイルを開く 2file.write "Hello" # "Hello" を書き込む 3file.rewind # ポインタを先頭に戻す 4 5char = file.getc # 最初の文字 'H' を読み込む 6file.ungetc(char) # 読み込んだ 'H' をストリームに戻す 7 8file.close # ファイルを閉じる 9# File.delete("example.txt") # 実際にはファイルの後処理が必要ですが、構文例では省略します
引数(parameters)
char
- char: IOストリームに返却したい1文字を指定します。
戻り値(return)
self
IOオブジェクト自身(self)が返されます。これにより、メソッドチェーンで連続してIO操作を行うことが可能になります。