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`。
