Ruby 使用手冊

單件方法 Singleton methods

實例 (instance) 的行為由其所屬的類別決定,但有時候我們知道某個實例應該具有特定行為。大部分語言中,我們必須大費周章定義其他類別,但只能實例化 (instantiate) 一次。而 Ruby 能為所有物件提供自己的方法。

ruby> class SingletonTest
    |   def size
    |     25
    |   end
    | end
   nil
ruby> test1 = SingletonTest.new
   #<SingletonTest:0xbc468>
ruby> test2 = SingletonTest.new
   #<SingletonTest:0xbae20>
ruby> def test2.size
    |    10
    | end
   nil
ruby> test1.size
   25
ruby> test2.size
   10

本例中,test1test2 屬於同一類別,但 test2 具有重新定義的 size 方法,因此兩者的行為會不一樣。只給予單一物件的方法稱為單件方法 (singleton method)

單件方法經常用於圖形使用者介面 (graphic user interface, GUI) 的元素,當按下不同按鈕,就會執行不同動作。

單件方法並不是 Ruby 獨有的,CLOS、Dylan 等也有。有些語言例如 Self 及 NewtonScript 更只有單件方法。這有時會稱為原型 (prototype-based) 語言。

Copyright (c) 2005-2008 Mark Slagell,中文翻譯 Ruby Taiwan 社群

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

A copy of the license is included in the section entitled "GNU Free Documentation License."