When we're defining a Hash in Ruby, there's several syntax we can use:
# IRB Ruby 2.7.1 - Defining a Hash
my_hash = { 'string_transformed_into_symbol_1': 'value',
            "string_transformed_into_symbol_2": 'value',
            'string_1' => 'value',
            "string_2" => 'value',
            symbol_1: 'value',
            :symbol_2 => 'value' }
I was thinking that the arrow => was from Ruby 1.8 and was replaced by the colon :. Though, from the example above, we can see that it is not only a syntactic sugar: : transforms a key String into Symbol:
# IRB Ruby 2.7.1 - Outputing a Hash
my_hash
=> { :string_transformed_into_symbol_1 => "value",
     :string_transformed_into_symbol_2 => "value",
     "string_1" => "value",
     "string_2" => "value",
     :symbol_1 => "value",
     :symbol_2 => "value" }
From this question, mu is too short's great answer stated:
The JavaScript style (
key: value) is only useful if all of your Hash keys are "simple" symbols (more or less something that matches/\A[a-z_]\w*\z/i[...] But you still need the hashrocket if your keys are not symbols.
This makes me consider : and => as methods (but I know I'm wrong). However, I couldn't find anything on the documentation about it.
Q: What exactly are : and => ? How could I learn more about them, and where are they defined in Ruby's source code ?
 
     
    