提升未定义的局部变量或方法

时间:2016-12-22 05:32:00

标签: ruby

好的,我明白什么是局部变量,什么是全局变量,但是我在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'

无论如何,我对局部变量的理解是你可以访问主文件中的那些,但是当涉及到全局变量时,你可以为它分配$并从本身内部的方法访问。

我研究过其他未定义的变量或方法,但他们很直接。

1 个答案:

答案 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)。