走近 Ruby 的世界(一)

因工作需要,需用到 Ruby 来写 BDD(Behaviour Driven Development) 的脚本,这样的话还是希望自己对 Ruby 有一定程度的了解,不能总是依葫芦画瓢吧。

Ruby 是由松本行弘(Yukihiro Matsumoto, 简称:Matz) 发明的,确实应该佩服一下,不存在什么民族情节的,比起所谓的汉语编程要强上千百遍,再说,通常民族情节都为政治所利用的。蒙牛、百度,腾讯等等 ,民族品牌,狗屁,都是某些个岛国注册的。

Ruby is designed to make programmers happy. Ruby 吸收了 List、Smalltalk 和 Perl 的灵感,采用了类似于 C 和 Java 的语法。

Ruby 是完全面向对象的编程语言(completely object-oriented language),不像 Java 和 C 存在基本(原始)类型,在 Ruby 的世界里,什么都是对象,像数字,true、false 或  nil 都是对象,它们有自己的属性和方法,你可以对它们点一下点出东西来。如:

注意到,别以为上面是在引用对象的 class 属性,其实不然,是在调用相应的方法,只是把圆括号省去了而已。Ruby 在调用方法时通常会省去圆括号,特别是对于无参方法时。Ruby 是不允许从外部访问对象的内部状态的,必须通过访问方法的,这与 Objective-C 是一致的。所以上面的 puts 1.class 就是调用的 puts 1.class()。

块和迭代,看下面的代码即解释:

说明:Ruby 是使用了类 Java/C 的语法,所以语句后也可以用分号来分隔,只是 Ruby 还支持用换行来分开两条语句。Ruby 中很多方法后可使用块(Block),看方法是怎么定义的,它和 Objective-C 的 Block 差不多,其实就是个闭包(Closure)。

块(Block) 的表示法既可以用{},也可以用 do ... end,所以上面代码中最前最后两个语句可以写成:

你是愿意写 {} 还是 do ... end,就看自己的习惯了。

很多时候,块中的语句根据调用者是什么会被迭代执行,譬如是数组,或哈稀的方法的块,看块是怎么定义的:

块可以带几个参数,块的参数用两个竖线框起来,逗号分隔多个参数

和 PHP/Perl 一样,在双引号括起的字符串中间的像 #{value},会被解析出它的值来,再调用 to_s 方法插入到相应位置上,例如

puts "#{value}"   的执行效果就是    puts value.to_s;

块不仅是作为一个可复用的闭包方便使用,它还会给你处理好资源的释放和异常,如:

上面的代码在操作完后自动释放文件句柄,并且不用你显示的去处理 IO 异常,想像一下在操作数据库时有了这样的闭包多方便,所以 Groovy 也是充分发挥了这一特点的。

类别: Ruby. 标签: , . 阅读(236). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar