cities = {'CA' => 'San Francisco',
'ML' => 'Detroit',
'FL' => 'Jacksonville'}
cities['NY'] = 'New York'
cities['OR'] = 'Portland'
def find_city(map, state)
if map.include? state
return map[state]
else
return "Not Found"
end
end
#ok pay attention!
cities[:find]= method(:find_city)
while true
print "State? (Enter to quit) "
state = gets.chomp
break if state.empty?
#this line is the most impotant ever! study!
puts cities[:find].call(cities, state)
end
Witam jestem tu nowy Zacząłem swoją naukę z Ruby od LRtHW miesiąc temu, doszedłem do tego zadania i padłem.
Co rozumiem,…
Cities to tablica alokacyjna (hash) ktora za klucz przyjmuje skrót stanu, by wypisać miasto (wartość)
Następnie definiowana jest funkcja find_city która przyjmuje 2 argumenty, (map i state) choć te nazwy są mało istotne. Łapie że pierwszy argument to nazwa tablicy w której będzie szukać klucza, czyli drugiego argumentu i jeżeli go znajdzie zwraca wartość tego klucza (return map[state]) w przeciwnym wypadku wypisuje “Not found”. To jeszcze rozumiem ale…
cities[:find]= method(:find_city)
Tego nie rozumiem, to jest przypisanie hashu do funkcji find city ? Dlaczego symbole? (ma to pewnie jakis zwiazek z tym że symbole stosowane sa jako klucze w hashu)
Dalej…
while true
print "State? (Enter to quit) "
state = gets.chomp
break if state.empty?
puts cities[:find].call(cities, state)
end
Pętla while, będzie wykonywać się do momentu aż state==nil. Użytkownik podaje nazwę stanu i co dalej … jak state trafia do funkcji find_city? Z ostatniej linii kodu rozumiem że cities[:find] wywołuje (.call) funkcje find_city i podaje wymagane argumenty. Ale jest to wszystko dla mnie mocno mgliste… Może ktoś pomorze i wyjaśni czy właściwie rozumiem lub co było by bardzo miłe, trochę naświetli mi co tu się dzieje