这些魔幻的Ruby特性,了解一下?

原创
2018/05/16 15:02
阅读数 97

内容主要来自于《七天七语言》和《Ruby Programming》。

一、Ruby核心思想

Bruce有一段非常精彩的话,来形容Ruby:

Ruby是崇尚自由精神的语言,允许做几乎一切事情,包括修改NilClass或String这样的核心类。
Ruby实现了最纯粹意义上的面向对象,让Smalltalk、Perl和Lisp的灵魂在新的驱壳里高歌。
利用Ruby的灵活和简洁,从一个简单的软件开始,逐步增加更多功能,并不断重构和优化。

二、一切皆对象的魅力

来看数字的例子体会一下:

3.times {puts 'hiya there'}

3是Fixnum对象,times是Fixnum类的方法。

三、闭包

Ruby没有标准实现first-class,但他提供的强大闭包特性,让他很轻松的完成first-class的行为。 主要提供了Blocks、Procs和lamda三种方式,参考这篇文章:了解 Ruby 中的闭包 : blocks , procs 和 lambdas
文中有一个例子,感受一下:

(1..100).inject(&:+)

# => 5050

# 相当于下面的代码

(1..100).inject do |acc, x|
  acc += x
end

# => 5050 

另一个例子:

:**.to_proc.call(2,5) # 2^5

# => 32

这里用到了Ruby中Symbol的知识,也就是符号前的冒号的应用。

四、Mixin

Ruby采用模块为类添加额外的功能。可以对比一下Java中的接口,其实Java8中的default方法有点类似于Ruby的模块概念。
输入图片说明
模块是函数和常量的集合。如果在类中包含一个模块,那么该模块的行为和常量也会成为类的一部分。

五、元编程

如果能调动热情,发挥想象力,编程将变得有乐趣和轻松。 只有改变一门语言的本来面目和行为方式,你才算真正掌握了赋予编程无穷乐趣的魔法。 看一个例子,给类添加行为: 输入图片说明
这个特性有点类似于C#中用static关键字做的类扩展或者是JavaScript中的prototype,可惜的是,Java中并不允许如此,只能用类似StringUtils的工具类,而不能直接扩展JRE中的类!

总结

学习Ruby过程中,总给我带来惊喜,确实不负“魔幻”二字,非常有趣,推荐给大家!

展开阅读全文
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部