变量还是方法?
这个语句: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多好处的同时,也付出了不少代价!!
====完毕====
+
-
*
/
分享到:
相关推荐
Ruby编程语言_涵盖Ruby 1.8和1.9
ruby1.9.2_1.9.2-p290-1_amd64.deb
《Ruby Programming_向Ruby之父学程序设计_第2版》PDF版本下载
Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统
提供空的Module#ruby2_keywords方法,以实现与ruby2.7和ruby3的正向源代码级兼容性。 安装 将此行添加到您的应用程序的Gemfile中: gem 'ruby2_keywords' 然后执行: $ bundle 或将其自己安装为: $ gem ...
一些图形算法的Ruby实现_Ruby_下载.zip
SlopeOne推荐算法的Ruby实现_Ruby_下载.zip
Ruby语言教程:Ruby 变量示例
函数式-确定性-Ruby取笑___下载.zip
Windows7_Cygwin_Git_RVM_Ruby1.9.3_Rails3_MongoD B_Nginx_Unicorn_Rspec_Guard_Spork(2-Ruby on Rails3 安装配置
weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin.
RUBY on SaaS 高级软件工程第二次作业代码
Beginning_Ruby_From_Novice_to_Professional.pdf
ruby-measurement是一个简单的 Ruby gem,用于计算和转换测量单位。 安装 将此行添加到应用程序的 Gemfile: gem 'ruby-measurement' 然后执行: $ bundle 或者自己安装: $ gem install ruby-measurement 用法 ...
ruby的基础教程,简单,粗暴,明了,不墨迹,大量练习,教你思考解决问题
第一个是纯 Ruby 中模拟退火随机搜索过程的一个很好的通用实现。如果您将事物格式化为模拟退火问题,那么文件模拟退火.rb 应该在许多问题域中都很有用。第二个是针对特定问题域的模拟退火的具体实现:安排锦标赛。在...
机智红宝石 wit-ruby是Wit.ai的 Ruby SDK 。
ruby_on_rails_3_入门教程(中文)
ruby-build - 编译和安装Ruby