В чем разница между одинарными и двойными кавычками для запроса хэша в Ruby? - PullRequest
6 голосов
/ 03 мая 2011
{"user"=>
   {"bio"=>"rubyist",
   "created_at"=>"2011-05-03T15:21:46+02:00", 
   "email"=>"paul@pauldix.net", 
   "id"=>61, "name"=>"paul", 
   "updated_at"=>"2011-05-03T15:21:46+02:00"}}  

В чем разница между использованием двойных двойных кавычек и одинарных кавычек?:

attributes = JSON.parse(last_response.body)["user"]
attributes = JSON.parse(last_response.body)['user']

Кажется, что первый случай работает, но второй случай не находит ключ.Я не понимаю почему.

Ответы [ 4 ]

7 голосов
/ 03 мая 2011

Для различий уже есть другие хорошие ответы.Я подозреваю, что у вас нет однобайтовых одинарных кавычек.

Возможно, у вас могут быть обратные кавычки:

attributes = JSON.parse(last_response.body)[`user`]

или многобайтовые одинарные кавычки:

attributes = JSON.parse(last_response.body)[’user’]

В этом случае они должны быть заменены однобайтовыми одинарными кавычками.

6 голосов
/ 03 мая 2011

В случае простого текстового ключа, такого как «пользователь», это не должно иметь никакого значения, странно, что оно действительно не работает. Но если ваш ключ является выражением типа, скажем, "# {variable_here}", он не будет оцениваться, если вы не используете двойные кавычки. Это тот случай?

6 голосов
/ 03 мая 2011

Одно существенное различие между одинарными и двойными кавычками в Ruby заключается в том, что двойные кавычки выполняют интерполяцию строк, а одинарные кавычки - нет:

ruby-1.9.2-p180 :001 > puts "one plus one is #{1 + 1}"
one plus one is 2
 => nil 
ruby-1.9.2-p180 :002 > puts 'one plus one is #{1 + 1}'
one plus one is #{1 + 1}
 => nil

В вашем случае при обращении к хешу это не должно иметь значения:

ruby-1.9.2-p180 :003 > {'one' => 1}['one']
 => 1 
ruby-1.9.2-p180 :004 > {'one' => 1}["one"]
 => 1
3 голосов
/ 03 мая 2011

Странно, они должны работать одинаково и делать для меня:

>> user = {"user"=>
..        {"bio"=>"rubyist",
..          "created_at"=>"2011-05-03T15:21:46+02:00", 
..          "email"=>"paul@pauldix.net", 
..          "id"=>61, "name"=>"paul", 
..          "updated_at"=>"2011-05-03T15:21:46+02:00"}}.to_json 
#=> "{"user":{"bio":"rubyist","created_at":"2011-05-03T15:21:46+02:00","email":"paul@pauldix.net","id":61,"name":"paul","updated_at":"2011-05-03T15:21:46+02:00"}}"
>> attributes = JSON.parse(user)["user"] 
#=> {"bio"=>"rubyist", "created_at"=>"2011-05-03T15:21:46+02:00", "email"=>"paul@pauldix.net", "id"=>61, "name"=>"paul", "updated_at"=>"2011-05-03T15:21:46+02:00"}
>> attributes = JSON.parse(user)['user'] 
#=> {"bio"=>"rubyist", "created_at"=>"2011-05-03T15:21:46+02:00", "email"=>"paul@pauldix.net", "id"=>61, "name"=>"paul", "updated_at"=>"2011-05-03T15:21:46+02:00"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...