What's the difference between colon ":" and fat arrow "=>" [duplicate]
Asked Answered
O

2

43

What's the difference between colon : and fat arrow => in Ruby? Or when to use what?

:foo => true
foo: true
Oxidate answered 20/11, 2011 at 1:43 Comment(0)
I
35

The syntax is for defining Hash key/value pairs, and the difference depends on the Ruby version.

Supported in both Ruby 1.8 and Ruby 1.9

:foo => true

Supported only in Ruby 1.9

foo: true

If you're developing in Ruby 1.9 you should probably use the syntax:

foo: true

as it appears to be the direction the community is moving in.

Invariable answered 20/11, 2011 at 1:49 Comment(5)
Where did you hear that => would be deprecated?Seigneur
Yeah, where did you hear => is going to be deprecated? I don't recall such a thing. And even if it were true, it would break the main Hash functionality that any object can serve as the key. So, only symbols could be used as keys if that happened! eg: {Object => Object} would no longer exist [that was pseudo code of a sort].Claman
Sorry I can't recall where I heard that I may have made it up. I've removed the reference to it eventually being deprecated.Invariable
You may have heard that => is obsolete from peepcode.com/blog/2011/rip-ruby-hash-rocket-syntaxSeigneur
@AndrewGrimm: That blog post is overly dramatic nonsense. Blarg. Don't worry, I know you know that already :)Claque
S
10

The latter is the new Hash syntax introduced in 1.9. See, for example:

http://breakthebit.org/post/8453341914/ruby-1-9-and-the-new-hash-syntax

The hashes that the two lines generate are identical.

Suter answered 20/11, 2011 at 1:44 Comment(2)
This is only for when the key is a symbol. If you want another object for the key, you'll need the fat arrow as before.Dyaus
On that point, note that {"key": "value"} will be silently converted to {:key=>"value"} - the string will be turned into a symbol. If you want a string key, use {"key"=>"value"}.Brioche

© 2022 - 2024 — McMap. All rights reserved.