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

instance method IO::Buffer#source

source -> IO::Buffer | String | nilRuby 4.1 から[permalink][rdoc][edit]

バッファの参照元を返します。

返す値はバッファの作り方によって異なります。

  • IO::Buffer#slice で作ったスライス -- IO::Buffer#slice を呼んだバッファ。スライスからさらに作った場合は、直接の親
  • IO::Buffer.for にブロックを渡して作ったバッファ -- 渡した文字列そのもの
  • IO::Buffer.for にブロックを渡さずに作ったバッファ -- 内部で作った凍結済みの複製。渡した文字列が凍結済みの場合は、その文字列そのもの
  • IO::Buffer.new や IO::Buffer.map で作ったバッファ -- nil

無効になったスライスでも、参照元を返します。 IO::Buffer::Storage#free や IO::Buffer::Storage#transfer を呼んだあとのバッファと、IO::Buffer.for のブロックを抜けたあとのバッファでは nil を返します。

buf = IO::Buffer.new(8)
p buf.source                    # => nil

part = buf.slice(2, 4)
p part.source.equal?(buf)       # => true

# スライスからさらに作った場合は、直接の親が参照元になる
child = part.slice(1, 2)
p child.source.equal?(part)     # => true
p part.source.equal?(buf)       # => true
例: IO::Buffer.for で作ったバッファ
str = +"abc"
p IO::Buffer.for(str) {|b| b.source.equal?(str) } # => true

copy = IO::Buffer.for(str).source
p copy.frozen?        # => true
p copy.equal?(str)    # => false

[SEE_ALSO] IO::Buffer#slice, IO::Buffer#advance