74

Ruby の文字列とシンボルの違いは何ですか? また、いつどちらを使用する必要がありますか?

4

11 に答える 11

93

主な違いは、単一の値を表す複数のシンボルが同一であるのに対し、文字列ではそうではないことです。例えば:

irb(main):007:0> :test.object_id
=> 83618
irb(main):008:0> :test.object_id
=> 83618
irb(main):009:0> :test.object_id
=> 83618

これらはシンボル への 3 つの参照:testであり、すべて同じオブジェクトです。

irb(main):010:0> "test".object_id
=> -605770378
irb(main):011:0> "test".object_id
=> -605779298
irb(main):012:0> "test".object_id
=> -605784948

これらは文字列「test」への 3 つの参照ですが、すべて異なるオブジェクトです。

これは、シンボルを使用すると、アプリケーションによってはかなりの量のメモリを節約できる可能性があることを意味します。また、シンボルは同じオブジェクトであるため、等しいかどうかを比較する方が高速です。オブジェクト ID だけでなく文字列値を比較する必要があるため、同一の文字列の比較は非常に遅くなります。

どちらをいつ使用するかというと、文字列ではなく一意の識別子が本当に必要なハッシュキーなどを除いて、ほとんどすべてに文字列を使用します。

于 2008-10-31T22:11:01.363 に答える
17

シンボルと文字列の違いは何ですか?

  1. シンボルは不変です。値は一定のままです。
  2. 同じシンボルを複数回使用すると、同じオブジェクト ID を持ち、毎回一意のオブジェクト ID を持つ異なるオブジェクトになる文字列と比較して同じオブジェクトになります。
  3. splitSymbolsのような String メソッドを呼び出すことはできません。

Rubyのシンボルと文字列の違いを理解するより

中国語を知っている場合は、Ruby Symbolの理解も読むことができます。

于 2014-04-29T07:46:31.757 に答える
5

Stringとの追加の違いSymbolは、 aが比較的無駄のないオブジェクトであるのStringに対し、 a には文字列操作用のメソッドが多数あることです。Symbol

StringclassSymbolclassのドキュメントを確認してください。

于 2008-11-01T18:24:46.483 に答える
2

Ruby の String と Symbol には主に 2 つの違いがあります。

  1. 文字列は可変で、シンボルは可変ではありません:

    • 文字列は可変であるため、どこかで変更される可能性があり、結果が正しくない可能性があります。
    • シンボルは不変です。
  2. 文字列はオブジェクトなので、メモリ割り当てが必要です

    puts "abc".object_id # 70322858612020
    puts "abc".object_id # 70322846847380
    puts "abc".object_id # 70322846815460
    

    一方、Symbol は同じオブジェクトを返します。

    puts :abc.object_id # 1147868
    puts :abc.object_id # 1147868
    puts :abc.object_id # 1147868
    

そのため、文字列はシンボルよりも使用および比較に時間がかかります。

詳細については、「 Ruby のシンボルと文字列の違い」を参照してください。

于 2016-07-05T00:00:13.250 に答える
-1

Strings are Mutable , Symbols arre immutable
注: 可変オブジェクトは代入後に変更できますが、不変オブジェクトは上書きのみ可能です http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and -ストリングス/

于 2013-07-21T18:24:58.063 に答える
-1

シンボルは不変で、文字列は変更可能です。

文字列に対して操作を実行すると、新しいオブジェクトが作成され、メモリが使用されます。文字列に対してより多くの操作を実行すると、より多くのメモリを消費することになります。

シンボルは不変のオブジェクトであり、操作を実行すると元のオブジェクトに変更が加えられます。オブジェクトは作成されないため、より収益性が高くなります。

詳細については、ここをクリックしてください

于 2014-03-17T12:14:56.927 に答える
-1

シンボルは、名前と文字列を表すために使用するものです。文字列を数回使用する必要がある場合は、シンボルを使用すると、はるかに簡単で生産的になります。

そして、Google経由でこれを見つけたところ、より詳細な情報が提供される可能性があります

于 2008-10-31T22:02:52.427 に答える
-1

シンボルと文字列は完全に異なります。この投稿では、違いについて少し洞察しています。それらをいつどこで使用するかについては、この件に関するかなり広範な投稿があり、has many :through があります。

于 2008-10-31T22:04:43.093 に答える