for some reason I\'m getting
NameError: undefined local variable or method `states\' for main:Object
though states is clearly defined. What
The method can't access the outside variables. You could use instance variables instead. From the documentation:
Instance variables are shared across all methods for the same object.
Example:
@states = {
CA: 'California',
FL: 'Florida',
MI: 'Michigan',
NY: 'New York',
OR: 'Oregon',
}
@states[:CO] = 'Colorado'
@states[:HI] = 'Hawaii'
@cities = {
CA: ['Alameda', 'Apple Valley', 'Exeter'],
FL: ['Exeter', 'Amelia Island', 'Bunnell'],
MI: ['Ann Arbor', 'East China', 'Elberta'],
NY: ['Angelica', 'Apalachin', 'Canadice'],
OR: ['Amity', 'Boring', 'Camas Valley'],
CO: ['Blanca', 'Crestone', 'Dillon', 'Fairplay'],
HI: ['Kailua', 'Hoopili', 'Honolulu'],
}
def describe_state state
description = "#{state.to_s} is for #{@states[state]}."
description << " It has #{@cities[state].length} major cities: "
description << @cities[state].join(', ')
end
puts describe_state :CA
#=> CA is for California. It has 3 major cities: Alameda, Apple Valley, Exeter
(I've fixed a minor bug in describe_state
)