好的,我明白什么是局部变量,什么是全局变量,但是我在learnrubythehardway上进行了练习40以获得额外的功劳,他们要求在哈希上执行每种方法。
$cities = {"CA" => "San Francisco",
"MI" => "Detroit",
"FL" => "Jacksonville"}
#Adding a new kay with a new value
$cities["NY"] = "New York"
$cities["OR"] = "Portland"
def loop(map,state)
$cities.each do |map,state|
if map.include? state
return map[state]
else
return "Not found."
end
end
end
$cities[:find] = method(:loop)
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
错误总是给我未定义的局部变量或方法' cities'
无论如何,我对局部变量的理解是你可以访问主文件中的那些,但是当涉及到全局变量时,你可以为它分配$并从本身内部的方法访问。
我研究过其他未定义的变量或方法,但他们很直接。
答案 0 :(得分:2)
这一行是你的问题:
mxstreambuf mout;
std::cout << "Hello World!\n";
范围内没有局部变量puts $cities[:find].call(cities,state)
,因此出错。
说实话,我发现整个例子非常做作,非常可怕。在写Ruby的过去10多年里,我实际上需要全局变量的时间可以用一只手的手指来计算,而另外一些用来备用。
由于您似乎对全局和局部变量感到困惑,请看一下:
cities
这是您在$foo = "foo"
defined?($foo)
#=> "global-variable"
defined?(foo)
#=> nil
和$cities
示例中发生的情况(请注意缺少cities
)。