2017-02-08 6 views
0

я хочу написать содержимое на одной струне :: Builder к другому, как:Кристалл: как скопировать строку :: Builder ы друг с другом

str1 = String::Builder.new 
str2 = String::Builder.new 

str1 << "foo" 
str2 << "bar" 

str1.copy_somehow_another_builder(str2) #=> "foobar" 

В настоящее время я просто str1 << str2.to_s.

Как это сделать? И это to_s'ing и нажатие такое же, как и то, что я хочу с точки зрения производительности?

+0

Согласно документации: «Вы никогда не должны иметь дело с этим классом (означает строку :: Builder). Вместо этого используйте [String.build] (https://crystal-lang.org/api/0.20.5/String.html#build%28capacity%3D64%2C%26block%29%3Aself-class-method) " –

ответ

1

Если какая-либо один встречается с проблемой, вы можете использовать IO :: Память для тех же целей, как:

io = IO::Memory.new 128 
io2 = IO::Memory.new 128 

io << "foo" 
io2 << "bar" 

buffer = uninitialized UInt8[128] 

io2.rewind 

if (read_bytes_length = io2.read(buffer.to_slice)) > 0 
    io.write(buffer.to_slice[0, read_bytes_length]) 
end 

p io.to_s #=> "foobar"