免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1011 | 回复: 0
打印 上一主题 下一主题

Ruby on My Way -- Java程序员的Ruby学习笔记(Ruby变量一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-16 16:36 |只看该作者 |倒序浏览

                                                  由于平时主要使用Java语言进行开发,对Java比较熟悉,因此我决定学习Ruby就从Ruby对象相关的知识入手,以便能尽快上手。今天首先了解一下Ruby的类中都有哪些类型的变量和常量,以及他们与Java的不同。

  Ruby中共有5种变量:local variable, instance variable, class variable, global variable以及constant。这几种变量的写法都有规定的格式,local variable以小写字母或者下划线开头,intance variable以@开头,class variable以两个@开头,global variable以$开头,constant以大写字母开头。Ruby中的变量都无需提前声明,直接赋值使用即可,而Java中需要首先声明变量的类型,不过这里需要注意,不声明变量了,有时就容易忘记给它赋一个初始值,如果我们没有给变量赋值,那么Ruby会附给他一个nil(Java中是null),当我们调用一个nil对象的方法时(nill对象没有方法,我们以为它不是nill)的时候,Ruby解释器会报错,类似Java中的NPE,在Java中这种情况通常在编译的时候就会被发现(local variable没有赋值的话)。最后比起Java,在类型上Ruby多了一种global variable,其他几种变量与Java中的使用方法也略有不同,下面详细说。
  在ruby的类中,所有成员变量都是private的,instance variable以及class variable全都是private的,要想使用这些变量必须通过accessor方法,这点与Java完全不同,不过这样的限制其实也可以帮助避免像在Java程序中的直接暴露对象内部数据的情况。
  Ruby中的local variable和Java中的相比,除了命名上的要求外,行为都是一样的,定义在方法或循环中的local variable只在定义的方法或循环中可见。
  instance variable与Java中的也基本相同,只有当前的实例可以访问。
  class variable也与Java中(static)基本相同。
  global variable在Java中没有对应的概念,声明后对整个程序可见,不过还是尽量避免global variable吧。
  在实验的过程中碰到了这样一个问题,代码如下:
class Test
  @count=0
  def index
    @count+=1
  end
end
test = Test.new
test.index
  执行以上代码后,解析器会报"undefined method '+' for
nil:NilClass",很明显,解析器认为count变量仍然为nil。可是在类的一开始count不是就被初始化了吗,怎么还是nil呢?后来在
论坛上[link]提问后得到指点。原来在Ruby类中,方法外执行的语句(当然包括给变量赋值这样的语句)只是在这个类被加载的时候被执行一次,以后这
个类就再也看不到这些语句了(上面的代码中,加载类后,count不是0,仍然是nil就是这个原因)。如何处理?应该就是放在initialize方法
中去初始化变量或者在使用变量前判断一下变量是否为nil吧(论坛里还有一位大侠建议可以这样,@count.to_i一下,因为nil也可以to_i,
值为0。to_i的作用是将变量变成整型值,如果变量是字符串什么的,可能这个办法就不管用了)。
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1449/showart_497641.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP