看得再多也不如自己動(dòng)手試,最近有閑就打算認(rèn)真研究一下ruby語言了。
Pragmatic programmer中說,需要一年學(xué)一門新語言一遍改造思想,去年淺淺的學(xué)了javascript的皮毛,今年可以看看ruby這
個(gè)有l(wèi)isp之風(fēng)的OO語言了。
第一個(gè)想到的是apt-get來下載了,得到的是一個(gè)交互式解析器和編譯器。和python的比較類似,不過ruby的交互程序是個(gè)單獨(dú)的程序叫做irb。
skyscribe:~$ ruby --version
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
skyscribe:~$ irb
irb(main):001:0> puts "hello"
hello
=> nil
可惜得到的不是比較新的版本。
不
過很快想起翻翻
wiki,還是用rvm方便的多。教程比較簡(jiǎn)單,參考它的
quick installation guide就可。第一次嘗試的時(shí)候用apt-get安裝了沒有purge,導(dǎo)致總是安裝到root用戶造
成“permission denied"的問題。
安裝好之后,所有的東西都在$HOME/.rvm下邊,比較干脆。
skyscribe:~$ rvm install 1.9.3
skyscribe:~$ rvm list
rvm rubies
ruby-1.9.3-p125 [ i686 ]
# Default ruby not set. Try 'rvm alias create default <ruby>'.
# => - current
# =* - current && default
# * - default
skyscribe:~$ rvm alias create default ruby-1.9.3-p125
Creating alias default for ruby-1.9.3-p125.
Recording alias default for ruby-1.9.3-p125.
Creating default links/files
skyscribe:~$ cat >> ~/.bashrc
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.
^C
skyscribe:~$ bash
skyscribe:~$ rvm use 1.9.3
Using /home/skyscribe/.rvm/gems/ruby-1.9.3-p125
skyscribe:~$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]
官方的文檔是最好的參考,推薦
ruby koans,下載下來,解壓后,是個(gè)典型的TDD學(xué)習(xí)材料,不斷運(yùn)行
ruby path_to_enlightenment.rb
koans 會(huì)遍歷每一個(gè)test case直到全部完畢,大概需要2個(gè)小時(shí)以上的時(shí)間方可全部完工。中間的注釋和THINK ABOUT的部分比較有意思,感悟比較深刻的是以下一些點(diǎn):
- 完完全全的OO,所有東西皆為對(duì)象
- 兩種基本的collection,hash和array基本對(duì)應(yīng)于python的dict和array
- 函數(shù)調(diào)用可以不必添加括號(hào),除非可能引發(fā)歧義或者解析錯(cuò)誤
- 函數(shù)參數(shù)可以包含block,支持lambda和closure
- bool類型更簡(jiǎn)單,只有false和nil與false等價(jià),其余全部是true
- 控制結(jié)構(gòu)有unless
- 類定義是開放式的,便于非侵入式設(shè)計(jì),當(dāng)然也可以允許修改builtin
- 每一個(gè)對(duì)象都有object id
- symbol和string可以互相轉(zhuǎn)化構(gòu)造
- method的調(diào)用可以用send 的方法發(fā)送message - proxy變得極度容易
- module可以被class include從而包含方法, 便于mixin設(shè)計(jì)
- instance variable和class variable 定義方便快捷
- regular expresion的和python極為相似