Symbols make stable hash keys for small records of related data.

symbol key A symbol such as `:name` is commonly used as a lightweight key in a Ruby hash.

Symbols and Hashes

lookup_key
symbols_hashes.rb
Replay: real traced execution (multi-file project)
lookup_key = :name
profile = { name: "Ada", role: "developer", score: 42 }
value = profile[lookup_key]

puts "key=#{lookup_key}"
puts "value=#{value}"
lookup_key = :role
profile = { name: "Ada", role: "developer", score: 42 }
value = profile[lookup_key]

puts "key=#{lookup_key}"
puts "value=#{value}"
lookup_key = :score
profile = { name: "Ada", role: "developer", score: 42 }
value = profile[lookup_key]

puts "key=#{lookup_key}"
puts "value=#{value}"
  1. lookup_key ← name, profile ← {:name=>"Ada", :role=>"developer", :score=>42}

    1lookup_key→ name = :name  #@lookup_key=:role, :score2profile→ {:name=>"Ada", :role=>"developer", :score=>42} = { name: "Ada", role: "developer", score: 42 }3value→ Ada = profile[lookup_key]Ada45puts "key=#{lookup_keyname}"6puts "value=#{valueAda}"
    outputkey=name
    value=Ada
  1. lookup_key ← role, profile ← {:name=>"Ada", :role=>"developer", :score=>42}

    1lookup_key→ role = :role2profile→ {:name=>"Ada", :role=>"developer", :score=>42} = { name: "Ada", role: "developer", score: 42 }3value→ developer = profile[lookup_key]developer45puts "key=#{lookup_keyrole}"6puts "value=#{valuedeveloper}"
    outputkey=role
    value=developer
  1. lookup_key ← score, profile ← {:name=>"Ada", :role=>"developer", :score=>42}

    1lookup_key→ score = :score2profile→ {:name=>"Ada", :role=>"developer", :score=>42} = { name: "Ada", role: "developer", score: 42 }3value→ 42 = profile[lookup_key]4245puts "key=#{lookup_keyscore}"6puts "value=#{value42}"
    outputkey=score
    value=42

Follow the Lookup

  1. lookup_key starts as :name.
  2. profile stores name: "Ada", role: "developer", and score: 42.
  3. profile[lookup_key] reads the value for :name.
  4. value becomes Ada.
  5. The program prints key=name and value=Ada. | lookup_key | value | | --- | --- | | :name | Ada | | :role | developer | | :score | 42 |

Exercise: symbols_hashes.rb

Reproduce key=name and value=Ada, then use the pinned keys role and score to predict each value.