這是簡要指南,協助您閱讀我網站上的 Ruby 程式碼範例。這並非 Ruby 的完整指南,我只會介紹我在文章中使用的結構。我假設您熟悉基本的物件導向語言。

左邊欄位包含程式碼片段,右邊則是對該組片段含義的說明。如果您發現某些 Ruby 程式碼無法理解,請向下掃描左邊欄位,尋找類似的內容。

若要入門 Ruby,最好的書籍是 PickAxe。若要尋找線上指南,沒有任何指南能比 Why's (poignant) Guide 更棒。

puts "hello world"

列印至主控台

字串可以使用單引號或雙引號(具有不同的跳脫規則)。

class ClassName

宣告類別

def some_method arg1, arg2
  call_method(arg1)
end

def property= arg1
  @property = arg1
end

宣告方法

方法可能是全域(如果在頂層定義)或類別上的執行個體方法。

在方法定義和方法呼叫上,括號為選用,前提是沒有歧義。

方法名稱可以包含「=」(這種情況下,它們會用作 name = aValue。名稱可以包含「?」字元,通常用於布林值 getter(例如 aSet.include?(aValue))。

@field

執行個體變數。

不需要宣告,會在首次使用時定義。如果在設定前存取,則會傳回 nil。

def self.class_method

定義類別方法

@@class_variable

類別變數

$global_variable

全域變數

attr_accessor :field1, :field2
attr_reader :field

具有存取器的執行個體變數

使用執行時期程式碼產生來定義 getter name 和 setter name = argattr_accessor 定義兩者,attr_reader 只定義 getter。

def initialize

初始化方法

每當您建立執行個體時,就會呼叫這個方法。預設情況下,您可以使用 aClass.new(arg1, arg2) 建立物件。兩個引數都會傳遞給初始化,因此您為每個需要的引數宣告一個引數。您也可以定義其他類別方法,使用其他名稱建立新的執行個體。

class Subclass < Superclass

宣告繼承

{|arg1, arg2| doSomething(arg1, arg2)}

do |arg1, arg2| 
  doSomething(arg1, arg2)
end

do
  doSomething
end

區塊

定義一個區塊,Ruby 用來表示 閉包 的名稱。兩種語法 {} 和 do/end 大多數情況下是等價的。{} 形式通常用於單行,而 do/end 形式用於多行區塊。

可以不帶參數或帶多個參數。像任何閉包一樣,可以引用詞法範圍內的任何變數。

區塊在 Ruby 中廣泛用於整個函式庫。

var ||= value

賦值給 Nil

僅當 var 為 nil 時,才將值賦給 var。這等於 var = value if nil == var

這裡的可怕細節來自於 nil 為假值(表示在布林表達式中 nil 被視為 false)。因此,與 var += 5 類似的表達式,這一個等於 var = var || value

aList.each {|i| doSomething(i)}

遍歷清單

區塊 是遍歷清單的通常方式。對清單的其他操作使用 CollectionClosureMethod

emptyArray = []
newArray = [var, "some text"]
doSomething([var1, var2])

陣列

Ruby 的陣列實際上是清單。它們是具有豐富 API 的可增長結構。你可以在表達式中的任何地方自由使用它們,例如在方法呼叫中。

var = aHash[key]
aHash[key] = var
newHash = {key1 => value1, key2 => value2}
emptyHash = {}

雜湊

anObject.
  aMethod(arg1,
    arg2,
    arg3)

推斷的語句延續

Ruby 使用換行符號作為語句分隔符。96% 的情況下這正是你需要的。然而,偶爾地,行會變得很長,因此使用換行符號的語言需要語句延續字元,以允許語句跨越多行。

Ruby 使用多個字元來推斷語句延續。因此,如果你在參數清單中以 "," 結束一行,ruby 會推斷你想要繼續語句。類似地,如果你以 "." 結束一行進行方法呼叫。