0
1. { :a => 10 } #=> no error
2. { a: 10 }    #=> no error

3. { :"str" => 10 } #=> no error
4. { "str": 10 }    #=> syntax error, unexpected ':', expecting =>

4. は 2 と同じではありませんか? 2 が機能し、4 が構文エラーをスローするのはなぜですか?

4

3 に答える 3

3

私の理解では、それが意味するのか、それとも意味するのか{"key": value}が明確ではないため、有効な構文ではありません。{:"key" => value}{"key" => value}

これについてはここで議論があります。ディスカッションでの Matz からの引用

| | もし {'key': 'value'} が {:key => 'value'} を意味する場合、異論はありません。

| | それは誤解を招きませんか?OPは {'key': 'value'} が {'key' => 'value} を意味することを望んでいると思います

しかし、{key: "value"} が {:key => "value"} の省略形であることを考えると、{"key": "value"} は {:"key" => "value" の省略形であるべきです。 }。その上、JSON を思い出すので、a: と "a": を別のものにすると、上記の誤解よりも混乱を招く可能性があります。

          matz.
于 2013-10-18T06:54:45.340 に答える
2

Hash: ハッシュは、キーが常にシンボルである場合に代替構文形式を許可します。

options = { :font_size => 10, :font_family => "Arial" }

次のように記述できます。

options = { font_size: 10, font_family: "Arial" }

最初の 3 つのケースはすべてキー位置のシンボルですが、4 番目は文字列インスタンスであり、キーとしてのシンボル インスタンスではありません。これが、4 番目のケースが無効な Ruby 構文である理由です。

{ :a => 10 }.keys[0].class # => Symbol
{ a: 10 }.keys[0].class    # => Symbol
{ :"str" => 10 }.keys[0].class # => Symbol
于 2013-10-18T06:38:41.513 に答える
1

(1) は標準シンボル、(2) はシンボル キー ハッシュの省略形 1.9 構文、(3) "str".to_sym の省略形、(4) は存在せず、hashrocket を使用する必要があります。

于 2013-10-18T06:39:20.687 に答える