2010-01-25 9 views
52

In Ruby 1.9 gibt es eine Möglichkeit, diesen Hash mit der neuen Syntax zu definieren?Ruby 1.9 Hash mit einem Bindestrich in einem Schlüssel

irb> { a: 2 } 
=> {:a=>2} 

irb> { a-b: 2 } 
SyntaxError: (irb):5: syntax error, unexpected tLABEL 
{ a-b: 2 } 
    ^

mit dem alten, es funktioniert:

irb> { :"a-b" => 2 } 
=> {:"a-b"=>2} 

Antwort

3

Sie können auch neben Syntax

{a: 1, b: 2, 'c-c': 3, d: 4} 
+0

genial! +1 für die Aktualisierung mit der neuen Ruby-Syntax, aus welcher Version ist verfügbar? 2? 2.1? – makevoid

+0

Ich weiß nicht, ich habe gerade diese Syntax versucht und es hatte funktioniert :) – Stiig

+1

@makevoid neue Syntax ist seit 2.2 verfügbar: https://github.com/ruby/ruby/blob/v2_2_0/NEWS#language-changes –

64

einige legitime Symbole gibt, die nicht mit der neuen Syntax verwendet werden kann. Ich kann keine Referenz finden, aber es scheint, dass ein Symbolname, der /^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/ entspricht, mit der neuen Syntax erlaubt ist. Das letzte Zeichen kann das Sonderzeichen "!" oder "?".

Für jedes Symbol, das diese Einschränkungen nicht erfüllt, können Sie die Ruby 1.8 Syntax verwenden müssen, :'my-symbol-name'

+1

was Sinn macht; Wie soll der Ruby-Interpreter das lesen, sonst? – Trevoke

+22

Ich habe 'parse.c' eingecheckt und es scheint, dass mit der neuen Syntax das Symbol als' tLabel' Token geparst wird. Und passender Name ist mehr wie/[a-zA-Z _] [a-zA-Z0-9]/:-) – MBO

+0

@MBO, Zusätzliche Punkte für die Quelle gehen. Ich habe die Regex in meiner Antwort bearbeitet. Vielen Dank! –

22

Sie die alte und neue Syntax kombinieren:

{a: 1, b: 2, :'c-c' => 3, d: 4} 
25

Um Striche mit dem neuen zu verwenden Syntax:

<%= link_to "Link", link_path, {data: {something: 'value1', somethingelse: 'value2'}} %> 

Dies wird erzeugen:

<a href="/link" data-something='value1' data-somethingelse='value2'>Link</a> 

Dies ist vielleicht nicht genau Ihr bestimmter Anwendungsfall, aber ich habe diesen Beitrag gefunden, als ich versuchte, selbst eine Antwort zu finden, also dachte ich, ich würde meine Ergebnisse teilen.

+0

gute Nachrichten für Puristen :) – prusswan

+0

Schön - das ist genau das, was ich versucht habe zu tun, danke! –

+2

AFAIK, dies ist spezifisch für die 'data' Attribute, wenn Sie andere Attribute mit Bindestrichen haben, müssen Sie die alte Syntax verwenden. – lime

Verwandte Themen