2

tryruby.orgによると、シンボルの使用法は1つのメモリ割り当てを使用し、次にその単一の割り当てを指しますが、複数の文字列を格納すると、それらが同じであっても、メモリに複数のインスタンスが格納されます。では、MP3やその他の圧縮または最適化の方法がどのように機能するかと同じように、繰り返しを利用するために、複数の文字列からリファクタリング、記号の使用に切り替える際にどのような考慮事項がありますか?重複が2つあるとすぐに?パフォーマンスの低下に気付いたときだけですか?対数計算?その他の考慮事項または視点?

私は強力で前向きなコンベンションの実践を学ぶことに興味を持っているプログラマーです。それが私が求めている理由です。

4

2 に答える 2

2
  • プログラムの入力または出力で必要な場合は、文字列を使用します。
  • プログラムの内部でのみ使用され、フラグなどの比較的小さな閉集合に属する場合は、シンボルを使用します。
于 2012-11-26T13:30:19.310 に答える
2

シンボルは基本的に不変のインターン文字列です。つまり、(たとえばを使用してgsub!)その場で変更することはできず、同じシンボルを2回使用すると、常に同じオブジェクトが返されることが保証されます。

"foo".object_id == "foo".object_id
# => false

:foo.object_id == :foo.object_id
# => true

その保証のため、シンボルがガベージコレクションされることはありません。シンボルを「作成」すると、現在のプロセスで永久に保持されます。

一般に、静的な文字列がある場合、またはハッシュ内のキーやメソッドの参照など、少なくとも限られた数の記号を使用する必要があります。ここでシンボルを使用すると、常に同じオブジェクトを取り戻すことができます。

通常の文字列では、比較方法によっては、異なるオブジェクトが返される可能性があります。通常の文字列では、同じように見えても実際には同じではない2つ以上の文字列を作成できます(上記の例を参照)。

于 2012-11-26T13:15:00.707 に答える