【发布时间】:2014-12-16 20:10:25
【问题描述】:
我对 :find 来自第 17 行以及 :findcity... 的来源感到非常困惑...您是如何在 ruby 的预定义方法调用中调用函数的???
cities = {'CA' => 'San Francisco',
'MI' => '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 important ever! study!
puts cities[:find].call(cities, state)
end
【问题讨论】:
-
您正在使用
:find键插入代表find_city的Method对象。 -
请不要在代码示例中复制行号。它使调试示例变得更加困难。
-
...
find_city是在您调用method(:find_city)的上面直接定义的方法。:find_city符号用于捕获方法本身。然后用cities[:find].call(cities, state)调用它。 -
如果正如代码 cmets 所暗示的那样,这是课程材料,那么可能是时候寻找另一位讲师了。很少 Ruby 爱好者会认为这是对语言特性的传统或有用的应用。
-
@mattt 这是来自Learn Ruby the Hard Way(早期版本)。