2012-04-24 3 views
2

Существует странная проблема с новым синтаксисом хеша Ruby 1.9.2. Как я могу поместить любой объект в качестве ключа в хэш в 1.9.2?ключ в рубине новый хеш

в 1.8.7 хэш это работает:

a="b" 
{"a" => "some",a => "another value",:a => "3rd value"} 

Но в 1.9.2> Мы не можем (или, как мы можем, если я ошибаюсь? ")

1.9.2 хэш :

{a: "some"} => {:a=>"s"} #it convert to old hash format 

но

a="a" 
{a: "..."} # This doesn't work 

{"a": "some value"} => syntax error, unexpected '}', expecting $end 
from /home/naveed/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>' 

{1: "s"} => 

SyntaxError: (irb):11: syntax error, unexpected ':', expecting tASSOC {1: "s"} 
+0

Вы знаете, что старый синтаксис по-прежнему действует в версии 1.9, верно? Это не замена, это дополнение. – sepp2k

+0

Да, старый синтаксис все еще здесь, и это будет ... Я не люблю вставлять слишком много ракет в свой код :) => => => Dusss Duss – Naveed

+0

Возможный дубликат [Есть ли разница между ': key = > "value" и 'key:" value "' assignments?] (http://stackoverflow.com/questions/8675206/is-there-any-difference-between-key-value-and-key-value-assignments) –

ответ

6

В Ruby 1.9 вас разрешено наносить двоеточие :только после символов, которые используются в качестве ключей!

Любой объект может использовать стрелка =>, даже символы.

+0

{a: "s", "a" => "d"} не выглядит красиво +1 для ": только после символов" – Naveed

+0

Рельсы широко используют символы в качестве ключей, поэтому появление хэшей в качестве вашего не слишком вероятно , Но, конечно же, Rails - это не единственное приложение Ruby ... – jdoe

3

Чтобы сказать это другим способом, новая функция не является новым общим хеш-синтаксисом, это особая настройка для написания хэшей, где ключи являются символьными литералами. {a: 1} - это просто ярлык для {:a => 1}, и все. Если у вас есть что-то еще в качестве ключей, вы должны использовать регулярный синтаксис.

Смежные вопросы