Ruby 4.0 リファレンスマニュアル

instance method IO::Buffer#readonly?

readonly? -> boolRuby 3.1 から[permalink][rdoc][edit]

バッファが読み取り専用の場合に true を返します。

読み取り専用のバッファは、IO::Buffer#set_valueIO::Buffer#set_stringIO::Buffer#copy などで変更できません。

IO::Buffer.for にブロックを渡さずに作ったバッファは、元の文字列が freeze されているかどうかによらず、常に読み取り専用になります。内部で作った文字列の複製をバッファの元として使うためです。ブロックを渡した場合は元の文字列のメモリを直接参照するため、その文字列が freeze されている場合にだけ読み取り専用になります。読み取り専用のファイルから作ったバッファも読み取り専用です。

# ブロックを渡さない場合は、元の文字列が freeze されていなくても読み取り専用
p IO::Buffer.for("test").readonly?                  # => true

# ブロックを渡した場合は元の文字列に従う
p IO::Buffer.for("test") { |buf| buf.readonly? }    # => false
p IO::Buffer.for("test".freeze) { |buf| buf.readonly? } # => true

p IO::Buffer.new(4).readonly?                       # => false