web-dev-qa-db-ja.com

Ruby 1.9キーにダッシュを含むハッシュ

Ruby 1.9では、新しい構文でこのハッシュを定義する方法はありますか?

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

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

古いもので、それは働いています:

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

次の構文も使用できます

{a: 1, b: 2, 'c-c': 3, d: 4}
7
Stiig

新しい構文では使用できない正当な記号がいくつかあります。参照が見つかりませんが、/^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/に一致するシンボル名が新しい構文で許可されているようです。最後の文字は特殊文字「!」かもしれませんまたは「?」。

これらの制限を満たさないシンボルについては、Ruby 1.8構文、:'my-symbol-name'を使用する必要があります

64
Wayne Conrad

新しい構文でダッシュを使用するには:

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

これにより以下が生成されます:

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

これはあなたの特定のユースケースではないかもしれませんが、自分で答えを見つけようとしたときにこの投稿を見つけたので、私の発見を共有したいと思いました。

25
Nate

古い構文と新しい構文を組み合わせることができます。

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