sban : personality of ruby grammer
学一门语言有两步,一是语法,二是基本类库。至于OO,则在语言之外,与具体语言无关。本文主要介绍Ruby的语法与其它高级语言的不同之处。
Ruby的语法与其它高级语言有一些不同之处,主要如下:
一、以#做单行注释不足为奇。但以=begin与=end做多行注释,多少比起AS的/**与*/有些罗嗦。用ubuntu的同志一定很熟悉#注释,其常直接用于单句代码之后。
二、AS3,php5以直接以回车换行代码,因为其代码都是以;结尾,没有;编译器便不认为该行代码已结。ASP则用_。Ruby则是用\。
三、Ruby检查类型是用运算符defined?,此外用eql?比较对象的值,用equal?比较对象的内存地址。Ruby中返回值为布尔的函数或操作符,多数以?结尾。这不同与其它语言。
四、Ruby有区间的概念。2..4表示2、3、4。2…4表示2、3。
五、Ruby仍然以=赋值。但可以按顺序赋值。如a,b=b,a,a与b交换值。
六、在AS3中===表示全等。而在Ruby中,===表示右边对象是否在左边区间内,如(2..4)===3,则返回true。
七、<=>这种复合运行符在AS3与C#均未见过。它比较两个对象的值,如a<=>b,如果a>b则返回1,返之返回-1,相等返回0。从这里也可以看出,Ruby的运行符也是方法。
八、空值不是null。而是nil,这个英文单词也是空的意思,但比null更短,却让人看着不如null正统。在字典里,null是计算机语言,而nil不是。
九、$array<<2<<'f'。<<在这里表示把2、f添加进数组$array中。反之,$array>>2不并不表示把2比数组中移出,此语法是错误的。
十、Ruby的循环语法,除了break,next,还有redo与retry。redo表示重新、从头开始整个循环;retry表示重复当前循环体。
十一、return true if 条件。这种返回方法在C#,AS中没有。但很灵活。
十二、Ruby不肯用花括号用代码块标记,而用end代替。Ruby把{}用在了code block中。Ruby有五个很多意思的操作符:times,upto,downto,each,step。
20.times{ print ’sban’ } #在屏幕上打印sban二十次
1.upto(5){|i| print i } #12345
5.downto(1){|i| print i} #54321
1.step(5,2){|i| print i} #135
‘a’.upto(’f'){|c| print c} #abcdef
数字与字母直接就可以像对象一样使用,这也说明在Ruby中一切皆是对象。
十三、在Ruby中,全局变量以$开头,实例变量则为@,类变量则以为@@,类名、模块名、常量名以大写开头。
十四、定义类方法不是function,而是def。去除方法则是undef。
十五、继承不是extends,而是<。extend关键字在Ruby用于某个类的对象包含某模块。
sban 2008/8/20于北京香山
原文链接:http://blog.sban.com.cn/2008/08/20/sban-personality-of-ruby-grammer.html
Related Posts




