您的位置:首页 > 编程语言 > Ruby

Ruby对比java,c++变量作用域问题

2018-01-09 11:10 573 查看
很多有java,c#,c++经验但没有ruby,perl经验的人初次学习应该都会被ruby,perl的变量作用域搞的有点混(我一开始也是)。看了一些书,对这个地方也没有做清楚的解释或者根本没有解释。

其实只要知道一点,java,c++,c#这些语言中,变量的最大作用域和他声明的位置有关,例如在方法里声明,最大作用域是整个方法体,在类里声明,最大作用域是整个类。如果有两个变量重名,则取和当前作用域最近的变量。

ruby,perl(python不太了解,应该也是一样的)这些语言,变量的作用域则和声明位置无关,而和声明前缀有关

下面一个类,很清楚的解释了这种机制

class Test
def initialize
#在方法里分别声明,实例变量,类变量,全局变量,局部变量,他们的作用域和声明位置无关
#在java,c++,c#里就没法在方法里声明实例变量
@value=10
@@value=10
$value=15
value=5
#没有发生重名覆盖,因为前缀已经指明了需要去哪个作用域里查找
puts @value
puts @@value
puts $value
puts value
end

def test2
#puts value 此时就报错了,因为该作用域里没有value变量
#下面都可以输出
puts @value
puts @@value
puts $value
end

end

t=Test.new
t.test2
#全局变量,尽管在类里声明,但是可以输出
puts $value


欢迎关注我的github

https://github.com/luckyCatMiao
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ruby java perl c语言 c#