Ruby で文字列を構築するときに、プラスイコール (+=) よりもシャベル演算子 (<<) が優先されるのはなぜですか? 質問する

Ruby で文字列を構築するときに、プラスイコール (+=) よりもシャベル演算子 (<<) が優先されるのはなぜですか? 質問する

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

公案test_the_shovel_operator_modifies_the_original_string文字列について.rb以下のコメントが含まれています。

Ruby プログラマーは、文字列を構築するときに、プラスイコール演算子 (+=) よりもシャベル演算子 (<<) を好む傾向があります。なぜでしょうか?

私の推測では、それはスピードに関係していると思いますが、ショベルのオペレーターのスピードを上げるための内部の動作がわかりません。

誰かこの好みの詳細を説明していただけますか?

ベストアンサー1

証拠:

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()

おすすめ記事