這些魔幻的Ruby特性,瞭解一下?

內容主要來自於《七天七語言》和《Ruby Programming》。編程

1、Ruby核心思想

Bruce有一段很是精彩的話,來形容Ruby:閉包

Ruby是崇尚自由精神的語言,容許作幾乎一切事情,包括修改NilClass或String這樣的核心類。
Ruby實現了最純粹意義上的面向對象,讓Smalltalk、Perl和Lisp的靈魂在新的驅殼裏高歌。
利用Ruby的靈活和簡潔,從一個簡單的軟件開始,逐步增長更多功能,並不斷重構和優化。函數

2、一切皆對象的魅力

來看數字的例子體會一下:工具

3.times {puts 'hiya there'}

3是Fixnum對象,times是Fixnum類的方法。學習

3、閉包

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

另外一個例子:.net

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

# => 32

這裏用到了Ruby中Symbol的知識,也就是符號前的冒號的應用。prototype

4、Mixin

Ruby採用模塊爲類添加額外的功能。能夠對比一下Java中的接口,其實Java8中的default方法有點相似於Ruby的模塊概念。
輸入圖片說明
模塊是函數和常量的集合。若是在類中包含一個模塊,那麼該模塊的行爲和常量也會成爲類的一部分。code

5、元編程

若是能調動熱情,發揮想象力,編程將變得有樂趣和輕鬆。 只有改變一門語言的原本面目和行爲方式,你纔算真正掌握了賦予編程無窮樂趣的魔法。 看一個例子,給類添加行爲: 輸入圖片說明
這個特性有點相似於C#中用static關鍵字作的類擴展或者是JavaScript中的prototype,惋惜的是,Java中並不容許如此,只能用相似StringUtils的工具類,而不能直接擴展JRE中的類!對象

總結

學習Ruby過程當中,總給我帶來驚喜,確實不負「魔幻」二字,很是有趣,推薦給你們!

相關文章
相關標籤/搜索