Python 是另一種很棒的多功能用途程式語言。從 Python 轉換到 Ruby,你會發現需要比學 Python 時多記一些語法。
相似點
Ruby 與 Python 類似的地方…
- 同樣有互動的提示操作環境(叫做
irb
)。 - 你同樣可以使用指令來讀取文件(Python 使用
pydoc
指令,而 Ruby 使用ri
指令)。 - 每行程式碼同樣不需要特別的結尾符號(除了一般的換行)。
- 字串可以像 Python 的三引號字串一樣的跨越多行。
- 中括號用來表示串列,大括號用來表示字典結構(在 Ruby 稱為 “hashes”)。
- 陣列操作起來差不多(陣列相加會產生一個更長的陣列,但像
a3 = [ a1, a2 ]
這樣的操作會回傳一個二維陣列)。 - 物件是強型別而且也都是動態型別(dynamically typed)。
- 所有東西都是物件,變數只是指向某個物件的參考指標。
- 有些關鍵字雖然看起來不太一樣,但在例外處理方面的操作是差不多的。
- 同樣也有嵌入式的文件工具(在 Ruby 中叫做 rdoc)。
相異點
Ruby 與 Python 不同的地方…
- 字串是可變動的。
- 你可以建立常數(不想要再改變值的變數)。
- 有些大小寫的使用慣例(例如類別名稱是以大寫字母開頭,一般變數則是使用小寫字母開頭)。
- 只有一種串列容器(陣列),而且它是可變動的。
- Ruby 的雙引號字串允許使用跳脫字元(例如
\t
)以及特別的“運算式插值” (expression substitution)語法(可以讓你直接在字串裡直接插入 Ruby 運算後的結果,而不用像"add " + "strings " + "together"
的字串組合)。單引號字串則跟 Python 的r"raw strings"
是一樣的。 - 沒有什麼”新式”或”舊式”的類別寫法,Ruby 的類別就只有一種寫法。
- 你不能直接存取物件的屬性。在 Ruby 裡指能透過方法呼叫。
- 方法呼叫時的小括號通常是可以省略。
- 有
public
、private
、以及protected
。 三種方式來設定存取層級,不像 Python 裡是用變數名稱前後加底線的方式表示。 - “混入(mixing)”功能用來取代多重繼承。
- 你可以新增或修改內建的類別。兩種程式語言都可以讓你在任何時機做這樣的修改, 但是 Python 會阻止你修改內建的類別 — Ruby 則沒有這個限制。
- 使用
true
以及false
而不是True
跟False
(Python 裡的None
在 Ruby 則是nil
)。 - 在測試布林值的真假時,只有
false
跟nil
會得到假的值,所有其它的值都為真。 (包括0
、0.0
、""
以及[]
)。 - Ruby 使用
elsif
而不是elif
。 - Ruby 使用
require
而不是import
,但使用上跟 Python 是一樣的。 - 用來產生文件的註解通常寫在內容的上面(而不像 docstrings 是寫在下面)。
- Ruby 有許多的捷徑可以使用,雖然有比較多要記,但你可以很快學會。這些捷徑會讓 Ruby 變得更有趣而且更有生產力。
- 變量設置後無法取消(類似 Python 的
del
聲明)。你可以將其重置爲nil
讓 GC 回收舊的內容,但它仍然存在于符號表中。 yield
關鍵字作用是不一樣的。在 Python 中,它會記住上一次返回時在函數體中調用的位置。外部代碼有責任繼續執行函數。而在 Ruby 中,yield
會執行作爲方法最後一個參數傳入的方法,然後立即執行。- Python 支持一種匿名函數,
lambdas
。而 Ruby 支持blocks
,Procs
和lambdas
。