局部变量与全局变量

在前面的示例中,我将值赋给了变量,例如 subtotaltaxtaxrate 。这些以小写字母开头的变量都是局部变量(Local variables),这意味着它们只存在于程序的特定部分。换句话说,它们被限制一个定义明确的作用域(scope)内。这是一个实例:

variables.rb
  1. localvar = "hello"
  2. $globalvar = "goodbye"
  3. def amethod
  4. localvar = 10
  5. puts(localvar)
  6. puts($globalvar)
  7. end
  8. def anotherMethod
  9. localvar = 500
  10. $globalvar = "bonjour"
  11. puts(localvar)
  12. puts($globalvar)
  13. end

这里有三个名为 localvar 的局部变量,一个在 main 作用域内被赋值为 “hello” ;其它的两个分别在独立的方法作用域内被赋值为整数(Integers):因为每一个局部变量都有不同的作用域,赋值并不影响在其它作用域中同名的局部变量。你可以通过调用方法来验证:

  1. amethod #=> localvar = 10
  2. anotherMethod #=> localvar = 500
  3. amethod #=> localvar = 10
  4. puts( localvar ) #=> localvar = "hello"

另一方面,一个以 $ 字符开头的全局变量拥有全局作用域。当在一个方法中对一个全局变量进行赋值,同时也会影响程序中其它任意作用域中的同名全局变量:

  1. amethod #=> $globalvar = "goodbye"
  2. anotherMethod #=> $globalvar = "bonjour"
  3. amethod #=> $globalvar = "bonjour"
  4. puts($globalvar) #=> $globalvar = "bonjour"