Ruby对比java,c++变量作用域问题
2018-01-09 11:10
573 查看
很多有java,c#,c++经验但没有ruby,perl经验的人初次学习应该都会被ruby,perl的变量作用域搞的有点混(我一开始也是)。看了一些书,对这个地方也没有做清楚的解释或者根本没有解释。
其实只要知道一点,java,c++,c#这些语言中,变量的最大作用域和他声明的位置有关,例如在方法里声明,最大作用域是整个方法体,在类里声明,最大作用域是整个类。如果有两个变量重名,则取和当前作用域最近的变量。
ruby,perl(python不太了解,应该也是一样的)这些语言,变量的作用域则和声明位置无关,而和声明前缀有关
下面一个类,很清楚的解释了这种机制
欢迎关注我的github
https://github.com/luckyCatMiao
其实只要知道一点,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
相关文章推荐
- C/C++全局变量和局部变量作用域问题
- C++与C#对比学习:函数(三)函数名与变量名同名问题
- Ruby Python Java C C++ 数组使用方法对比
- 【C++菜鸟问题】变量作用域
- 对比C++和java自加问题i++
- C/C++ 子类调用父类中的私有成员变量(对比JAVA)
- python和ruby变量作用域对比
- C++中全局变量与局部变量作用域问题
- [JAVA]变量作用域的问题
- java与C++变量初始化的对比
- 对比C++和Java语言不同点
- 在C++中各种变量常量的存储对比
- JAVA与C++::关于JNI中文字符串操作问题总结
- C++中变量的初始化问题
- J-Integra中的java数据类型与C++数据类型对比
- 关于C++&Java中命令行编译的问题
- Java: 简单模拟多线程访问同样变量导致的问题
- 对比C++和Java
- 指针操作超越变量作用范围的问题(高质量c++)
- Java,C++和Ruby的性能PK(续文)--关于凸包算法(convex hull)的效率