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

singleton method IO::Buffer.for

for(string) -> IO::BufferRuby 3.1 から[permalink][rdoc][edit]
for(string) {|buffer| ... } -> object

文字列 string のメモリ領域を参照する、コピーを伴わないバッファを作成します。

ブロックを渡さない場合は、string の内容を複製した凍結済みの文字列をバッファの元として使い、読み取り専用のバッファを返します。元の文字列とは切り離されるため、あとから元の文字列を変更してもバッファの内容は変わりません。

ブロックを渡した場合は、string 自身のメモリ領域を参照するバッファをブロックに渡し、ブロックの評価結果を返します。バッファへの書き込みは string に反映されます。ブロックの実行中、string は変更できません。 string が freeze されている場合は読み取り専用のバッファになります。

[PARAM] string:
バッファの元にする String を指定します。
例: ブロックを渡さない場合
buffer = IO::Buffer.for("test")
p buffer.get_string # => "test"
p buffer.external?  # => true
p buffer.readonly?  # => true

# 元の文字列を変更してもバッファには影響しない
str = +"test"
buffer = IO::Buffer.for(str)
str << "XY"
p str               # => "testXY"
p buffer.get_string # => "test"
例: ブロックを渡した場合
str = +"test"
IO::Buffer.for(str) do |buffer|
  p buffer.readonly? # => false
  buffer.set_string("Ruby")
end
p str # => "Ruby"

[SEE_ALSO] IO::Buffer.new, IO::Buffer.map