走近 Ruby 的世界(三)

Ruby 中有许多以 ? 和 !号结尾的方法,? 号方法返回布尔值用于判断的,如Array.empty?,可以想到三元操作符 a = b==1?1:2 。出现在方法名尾部的感叹号表明使用该方法是需要多加小心。许多Ruby的核心类都定义了成对的方法,它们具有同样的名称,只是结尾相差一个“!”,通常情况下,不带感叹号的方法返调用该方法的一个拷贝,带感叹号的方法则是一个可变方法,该方法会修改原来的对象,如 Array 类中的 sort 和 sort!。

Ruby 里对变量名有这么一个约定:全局变量加前缀 $,实例变量用前缀 @,类变量前缀用 @@。

Ruby 的类和模块,来实现一个 Ruby 的示例类,从中了解类的构造方法,块的实现、块内循环和调用以及符号的重载,看如下代码:

说明:initialize 方法为构造方法,在调用类的  new 方法时调用,不同参数完成重载。

each 方法用了  yield 语句可以接受块,执行时会把块中的执行语句应用到 yield 语句处,例如在调用 s.each{|x| print x; print x} 会把块中的执行语句 print x; print x 换到 yield 处,并应用 yield 后的  x 参数。

符号的重载就更简单了,直接重载 +、-、×、/ 等符号就行,因为 Ruby 可以用符号作为方法名,所以不需要像 Groovy 在重载 + 号时必须重载相应的 plus 方法。

上面代码执行的结果是:

1122334455
from: 2, to: 10

Ruby 还有一种叫做模块的东西,它是用来组织类、方法和常量的,相当于是名字空间。在使用模块时用 require/load 或 include 引入, require/load 后指定文件名,include 后指定模块名,比如下面的模块定义和运用:

名字空间的用法双冒号和 C++ 是一样的,执行后输出为:

3.1415926
Hello Umni.
miao

再 Ruby 的两个特性,Ruby 的字符串是可变的,可意随意插入、删除、替换子串,用 << 进行 append 操作; 而且两个字面相同的字符串并非同一个对象。if/while 判断时,评估的条件是 true 或 false,并无硬性规定是 true 或 false,nil 也是被认定为 false,那么非 nil 就是 true 了。

本文链接 https://yanbin.blog/close-to-ruby-world-3/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments