Data Types
Symbols and Hashes
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
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}"
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
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
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
lookup_keystarts as:name.profilestoresname: "Ada",role: "developer", andscore: 42.profile[lookup_key]reads the value for:name.valuebecomesAda.- The program prints
key=nameandvalue=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.