Ruby语言_陷阱_地雷_等的搜集(一)是变量还是方法_不统一 博客分类: Ruby_and_Rails
程序员文章站
2024-03-22 14:04:22
...
变量还是方法?
这个语句:name = my_name
在别的语言中,my_name基本就是局部变量了。(注意下语境吧,别讨论xxx)
在ruby中,因为方法调用可以省略括号,因此my_name也可能是一个方法,比如很可能是这个:self.my_name
>这个只是针对“右值”情况;
>如果是“左值”,则比较单一,就是局部变量,不是方法调用。所以,这里的name,不是方法。即使定义了name=这个方法。
这样的不好处是什么呢:不统一。凡是不统一的,人就会去猜,就需要解释,就是个潜在的雷。
从技术上来说,就是不能实现这个功能:去除@符号的实例变量。
Java中的实例变量:
暂略
Ruby中尝试实现类似的:
class Lee attr_accessor :name end lee = Lee.new lee.name = "fantaxy" puts lee.name
特别像。
但是上面的测试不是完全覆盖的。
再来个例子:
class Lee attr_accessor :name def a_test_method name = "fantaxy" end def another_test_method name = "June" self.name = name end end lee = Lee.new lee.a_test_method puts lee.name #=> nil lee.another_test_method puts lee.name #=> June
这个例子里面,当name作为左值的时候,没有了@符号(即如果不用@name) ,name就成了局部变量了。
输出结果证实了这一点。
需要在name前面加上self才可以!!
小姐:
#1 统一成java类似版本的实例变量使用还不行
#2 这种左值和右值使用不一致,是个需要注意的陷阱
#3 ruby中方法调用省略括号,得到了n多好处的同时,也付出了不少代价!!
====完毕====
+
-
*
/