python:
1 a = 0 2 def f(): 3 a = 9 4 print a 5 6 f() 7 print a
打印出来是9和0
a = 0 def f(): print a f() print a
打印出来是0和0
python调用f函数,执行print a的时候,会先在函数的作用域里查找是否有a这个变量,没有找到再到全局的作用域查找a这个变量。
ruby:
1 a = 0 2 def f() 3 a = 9 4 puts a 5 end 6 f() 7 puts a
打印出来是9和0
1 a = 0 2 def f() 3 puts a 4 end 5 f() 6 puts a
会报错
undefined local variable or method `a' for main:Object(NameError)
ruby解释器是逐行执行代码,遇到module,class和定义函数的地方会改变作用域,代码只能访问本作用域下面的变量。