Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby 1.9 hash with a dash in a key

In ruby 1.9 is there a way to define this hash with the new syntax?

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

with the old one, it's working:

irb> { :"a-b" =>  2 } => {:"a-b"=>2} 
like image 616
makevoid Avatar asked Jan 25 '10 18:01

makevoid


People also ask

How do you check if a hash has a key Ruby?

Overview. We can check if a particular hash contains a particular key by using the method has_key?(key) . It returns true or false depending on whether the key exists in the hash or not.

What can be a hash key in Ruby?

A Hash is a dictionary-like collection of unique keys and their values. Also called associative arrays, they are similar to Arrays, but where an Array uses integers as its index, a Hash allows you to use any object type. Hashes enumerate their values in the order that the corresponding keys were inserted.

How do you make hash hash in Ruby?

Ruby hash creation. A hash can be created in two basic ways: with the new keyword or with the hash literal. The first script creates a hash and adds two key-value pairs into the hash object. A hash object is created.

How do you add a value to a hash in Ruby?

Hash literals use the curly braces instead of square brackets and the key value pairs are joined by =>. For example, a hash with a single key/value pair of Bob/84 would look like this: { "Bob" => 84 }. Additional key/value pairs can be added to the hash literal by separating them with commas.


2 Answers

There are some legitimate symbols that cannot be used with the new syntax. I cannot find a reference, but it appears that a symbol name matching /^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/ is allowed with the new syntax. The last character may be the special character "!" or "?".

For any symbol that does not meet these restrictions, you have to use the Ruby 1.8 syntax, :'my-symbol-name'

like image 99
Wayne Conrad Avatar answered Sep 23 '22 11:09

Wayne Conrad


To use dashes with the new syntax:

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

This will generate:

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

This might not exactly be your particular use case, but I found this post while trying to find an answer myself so I thought I'd share my findings.

like image 26
Nate Avatar answered Sep 19 '22 11:09

Nate