Ruby初心者スレッドPart8
■ このスレッドは過去ログ倉庫に格納されています
0471デフォルトの名無しさん
2006/11/02(木) 03:30:12>>448
参考までに、Perlなら配列のサイズを広げるオーバーヘッドで、pushしてjoinより単純に連結する方が速くなるそうだ。IBMの記事より
>>452
Javaの部分が間違ってる
s+"hogehoge"+"hugahuga"
はコンパイルすると文字列定数はくっついて
new StringBuffer().append(s).append("hogehogehugahuga").toString()
もし"hogehoge"が変数tでも
new StringBuffer().append(s).append(t).append("hugahuga").toString()
で生成するStringBufferは1つ
>>461
>RubyのStringはStringBufferなんだよ
少し違う。たしかに可変長だがStringBufferはバッファが不足したら一気に元の2倍(自信なし)の容量を確保する。newのコストを減らすために。
>Javaではそもそも+=すら出来ないでしょ
できます。コンパイルされてStringBufferの式になおされる。
そして話が噛み合っていない人たちがいるようだが、エスパー的に解釈して
457は、JavaのStringBuilderのように、あらかじめバッファを確保しておく機能が必要だと言っている。コードで示せば
new StringBuilder(131072);
461は、JavaのStringは一度生成したらreallocできない、可変長という意味でStrinBufferと同じだと言っている。
■ このスレッドは過去ログ倉庫に格納されています