方法

一個方法是一個程式碼命名塊,通過在除了名稱引數的列表與一個或多個物件相關聯的,並且通常鑑定。

def hello(name)
  "Hello, #{name}"
end

方法呼叫指定方法名稱,呼叫它的物件(有時稱為接收方),以及分配給命名方法引數的零個或多個引數值。方法中計算的最後一個表示式的值將成為方法呼叫表示式的值。

hello("World")
# => "Hello, World"

當接收器不明確時,它是 self

self
# => main

self.hello("World")
# => "Hello, World"

正如 Ruby Programming Language 一書中所解釋的,許多語言區分了沒有關聯物件的函式和在接收器物件上呼叫的方法。因為 Ruby 是純粹的面嚮物件語言,所以所有方法都是真正的方法,並且至少與一個物件相關聯。

方法引數概述

型別 方法簽名 呼叫示例 分配
[R equired def fn(a,b,c) fn(2,3,5) a=2, b=3, c=5
V ariadic def fn(*rest) fn(2,3,5) rest=[2, 3, 5]
D efault def fn(a=0,b=1) fn(2,3) a=2, b=3
K eyword def fn(a:0,b:1) fn(a:2,b:3) a=2, b=3

這些引數型別可以以你可以想象的任何方式組合以建立可變引數函式。函式的最小引數數量等於簽名中所需引數的數量。額外引數將首先分配給預設引數,然後分配給*rest 引數。

型別 方法簽名 呼叫示例 分配
R,d,V,R def fn(a,b=1,*mid,z) fn(2,97) a=2, b=1, mid=[], z=97
fn(2,3,97) a=2, b=3, mid=[], z=97
fn(2,3,5,97) a=2, b=3, mid=[5], z=97
fn(2,3,5,7,97) a=2, b=3, mid=[5,7], z=97
R,K,K def fn(a,g:6,h:7) fn(2) a=2, g=6, h=7
fn(2,h:19) a=2, g=6, h=19
fn(2,g:17,h:19) a=2, g=17, h=19
VK def fn(**ks) fn(a:2,g:17,h:19) ks={a:2, g:17, h:19}
fn(four:4,five:5) ks={four:4, five:5}