Closed sisshiki1969 closed 2 months ago
String#stripですが、日本語マニュアルだと「また、文字列右側からは "\0" も取り除きますが、左側の "\0" は取り除きません。」と記載されています。 が、現在は「左側の "\0" も取り除く」ように実装が変更されています。 コード例も現在の挙動と異なります。(3.0.0以降)
マニュアルの記載
p " \0 abc \0".strip # => "\000 abc" # 右側のみ "\0" も取り除く
現在の挙動
❯ ruby -v -e 'p " \0 abc \0".strip' ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux] "abc"
なお、2.7.8以前のバージョンでは現在のマニュアル通りの挙動となるようです。
❯ ruby -v -e 'p " \0 abc \0".strip' ruby 2.7.8p225 (2023-03-30 revision 1f4d455848) [x86_64-linux] "\u0000 abc"
このコミットでlstrip_offset()の実装が変更されているのが原因と思われます。
この修正に関しては左側の"\0"だけ削らないのはバグであるとしてBug #17467で議論されており、日本語マニュアルの挙動が変更になるので修正が必要という話も出ていますが、そのままになってしまったようです。
String#strip!, #lstrip, lstrip!でも同様の問題があります。
String#stripですが、日本語マニュアルだと「また、文字列右側からは "\0" も取り除きますが、左側の "\0" は取り除きません。」と記載されています。 が、現在は「左側の "\0" も取り除く」ように実装が変更されています。 コード例も現在の挙動と異なります。(3.0.0以降)
マニュアルの記載
現在の挙動
なお、2.7.8以前のバージョンでは現在のマニュアル通りの挙動となるようです。
このコミットでlstrip_offset()の実装が変更されているのが原因と思われます。
この修正に関しては左側の"\0"だけ削らないのはバグであるとしてBug #17467で議論されており、日本語マニュアルの挙動が変更になるので修正が必要という話も出ていますが、そのままになってしまったようです。
String#strip!, #lstrip, lstrip!でも同様の問題があります。