內容主要來自於《七天七語言》和《Ruby Programming》。編程
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
另外一個例子:.net
:**.to_proc.call(2,5) # 2^5 # => 32
這裏用到了Ruby中Symbol的知識,也就是符號前的冒號的應用。prototype
Ruby採用模塊爲類添加額外的功能。能夠對比一下Java中的接口,其實Java8中的default方法有點相似於Ruby的模塊概念。
模塊是函數和常量的集合。若是在類中包含一個模塊,那麼該模塊的行爲和常量也會成爲類的一部分。code
若是能調動熱情,發揮想象力,編程將變得有樂趣和輕鬆。 只有改變一門語言的原本面目和行爲方式,你纔算真正掌握了賦予編程無窮樂趣的魔法。 看一個例子,給類添加行爲:
這個特性有點相似於C#中用static關鍵字作的類擴展或者是JavaScript中的prototype,惋惜的是,Java中並不容許如此,只能用相似StringUtils的工具類,而不能直接擴展JRE中的類!對象
學習Ruby過程當中,總給我帶來驚喜,確實不負「魔幻」二字,很是有趣,推薦給你們!