【Ruby3.x】StringScanner::unscan()メソッドの使い方
unscanメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
unscanメソッドは、StringScannerオブジェクトにおいて、直前のscanまたはmatch?メソッドの実行結果を取り消し、スキャン位置を元の状態に戻すメソッドです。StringScannerクラスは、文字列の中から特定のパターンを探し、読み進める(スキャンする)ための機能を提供します。このunscanメソッドは、直前に進めたスキャン位置を、そのscanまたはmatch?操作が開始された時点に巻き戻す役割を果たします。
例えば、あるパターンで文字列をスキャンした結果、意図しないマッチが得られた場合に、そのスキャン操作を取り消して、再度別のパターンでスキャンし直したいといった状況で利用できます。unscanを呼び出すと、内部のスキャン位置が巻き戻されるだけでなく、直前のマッチで得られた文字列を保持するmatchedメソッドの結果もクリアされます。
ただし、unscanメソッドにはいくつかの利用上の制約があります。一度unscanを実行した後は、次のscanまたはmatch?メソッドが実行されるまで、続けてunscanを呼び出すことはできません。また、StringScannerオブジェクトがまだ一度もscanまたはmatch?を実行していない場合や、直前の操作がスキャン位置を進めるようなメソッドでなかった場合(例えば、peekやgetchなど)、unscanを呼び出すとRangeErrorが発生します。このメソッドは、直前のスキャン操作を「元に戻す」ためのものとして、限定的な状況で使用されることを意図しています。
構文(syntax)
1require 'strscan' 2 3scanner = StringScanner.new("example string") 4scanner.scan(/\w+/) 5scanner.unscan
引数(parameters)
引数なし
引数はありません
戻り値(return)
self
self (StringScannerオブジェクト自身) が返されます。