Tak, jest różnica. Są prawna:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
ale nie są to:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
Można również użyć coś jak klucz z =>
więc można to zrobić:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
ale można” t wykonaj następujące czynności:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
Styl JavaScript (key: value
) jest użyteczny tylko wtedy, gdy wszystkie klucze skrótu są symbolami "prostymi" (mniej więcej coś, co pasuje do /\A[a-z_]\w*\z/i
, AFAIK parser używa wzoru etykiety dla tych kluczy).
Symbole stylu o oznaczeniu :$in
pokazują się rzetelnie podczas korzystania z MongoDB, więc w przypadku korzystania z MongoDB skończy się mieszanie stylów Hash. I jeśli kiedykolwiek pracujesz z określonymi kluczami hashe (h[:k]
), a nie tylko całymi haszami (h = { ... }
), nadal będziesz musiał używać stylu dwukropka dla symboli; będziesz musiał również użyć stylu colon wiodących dla symboli, których używasz poza hashe. Wolę być konsekwentny, więc w ogóle nie zawracam sobie głowy stylem JavaScript.
Niektóre problemy w stylu JavaScript zostały naprawione w Rubim 2.2. Teraz można używać cytatów jeśli masz symbole, które nie są ważne etykiety, na przykład:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
Ale trzeba jeszcze hashrocket czy klucze nie są symbolami.
'h = {'a.b': 'c'}' jest teraz legalne od Rubiego 2.2.0. Zobacz https://bugs.ruby-lang.org/issues/4276 –
@BSeven: Dzięki, zaktualizowałem [moja inna duża odpowiedź hashrocket] (http://stackoverflow.com/a/10004344/479863) chwilę temu, ale brakowało ten. –
Dlaczego uważasz, że przykład "h [: s] = 42" odnosi się do tego pytania? Moim zdaniem styl JavaScript vs styl hashrocket ma zastosowanie tylko do definicji hash klucz/wartość, a nie do adresowania elementów hashowych za pomocą kluczy. Dlatego przykład 'h [s:] = 42' wydaje się być mylący. –