Ruby语言_陷阱_地雷_等的搜集(一)是变量还是方法_不统一

 

变量还是方法?

 

这个语句: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多好处的同时,也付出了不少代价!!

 

 

====完毕====

+

-

*

/

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值