0

:"foo"および:'foo'引用符付きの表記法はシンボル リテラルですか:、それとも文字列の単項演算子ですか?

4

3 に答える 3

3

:実際には、自分で入力するか、メソッドを介して作成するリテラルの一部にすぎません。:名前またはを使用してリテラルを作成できますが"string"、演算子とは異なり、アクションを引き起こしたり、値を変更したりしません。

いずれの場合も、Symbol のインスタンスが返されます。:文字列表記で書くことが重要な場合があります。たとえば、記号として空白を含む文字列を表現したい場合は、文字列表記を使用する必要があります。

> :foo
=> :foo 

> :foo bar
SyntaxError: (irb):2: syntax error, unexpected tIDENTIFIER, expecting end-of-input

> :"foo bar"
=> :"foo bar"

さらに、これを等価演算子で調べるのは興味深いことです。(==)

> :"foo" == :foo
=> true 

> :"foo " == :foo
=> false

私のアドバイスは、文字列や名前を渡してシンボルを作成することではなく、同じシンボルを表現するさまざまな方法であると考えてください。最後に、入力したものがオブジェクトに解釈されます。これは、さまざまな方法で実現できます。

> :"foo"
=> :foo

結局のところ、%w(foo bar)別の書き方でもあり['foo', 'bar']ます。

于 2013-08-10T13:56:53.103 に答える
1

シンボル リテラルに関する Ruby のドキュメントには、次のように書かれています。

コロンを使用してシンボルを参照できます: :my_symbol.

補間によってシンボルを作成することもできます。

:"my_symbol1"
:"my_symbol#{1 + 1}"

基本的:"foo"に とはシンボル リテラルですが、補間:'foo'を使用してシンボルを作成する場合に役立ちます。

于 2013-08-10T13:27:13.037 に答える