1. ホーム
  2. ruby

[解決済み] Rubyで文字列を構築するとき、なぜシャベル演算子(<<)がプラスイコール(+=)よりも好ましいのですか?

2022-04-23 16:28:11

質問

RubyのKoansに取り組んでいます。

は、その test_the_shovel_operator_modifies_the_original_string での高安 about_strings.rb には、次のようなコメントがあります。

Rubyプログラマーは、プラス演算子よりもシャベル演算子(<<)を好む傾向があります。 等号演算子(+=)を使って文字列を構築します。 なぜですか?

私の推測では、スピードが関係していると思うのですが、ショベルのオペレーターが速くなるような水面下の動作が理解できていません。

どなたか、この好みの背景を詳しく説明していただけませんか?

解決方法は?

証明する。

a = 'foo'
a.object_id #=> 2154889340
a << 'bar'
a.object_id #=> 2154889340
a += 'quux'
a.object_id #=> 2154742560

だから << は新しい文字列を作成するのではなく、元の文字列を変更します。この理由は、rubyでは a += b の構文上の省略記法です。 a = a + b (他の <op>= 演算子)で、これは代入である。一方 << のエイリアスです。 concat() で、レシーバをインプレースで変更します。