2017-02-08 3 views
0

Je veux écrire le contenu sur une chaîne :: Builder à un autre, comme:cristal: comment copier String :: Builder s à l'autre

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

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

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

actuellement je viens str1 << str2.to_s.

Comment le faire? Et est-ce que to_s'ing et push est le même que ce que je veux du point de vue de la performance?

+0

Selon la documentation: « Vous ne devriez jamais avoir à faire face à cette classe (signifie String :: Builder). Au lieu de cela, utilisez [String.build] (https://crystal-lang.org/api/0.20.5/String.html#build%28capacity%3D64%2C%26block%29%3Aself-class-method) " –

Répondre

1

Si quelqu'un rencontre le problème, vous pouvez utiliser IO :: Mémoire pour le même but comme:

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"