定义单例方法

时间:2012-12-29 06:25:30

标签: ruby singleton-methods

以下代码来自 Exceptional Ruby

一书
starts_with_a = Object.new

def starts_with_a. ===(e)
    /^A/ =~ e.name
end 

如果我注释掉将新对象分配给starts_with_a的第一行,那么我会收到此错误:

`<main>': undefined local variable or method `starts_with_a' for main:Object (NameError)

问题1:为什么我需要为starts_with_a分配一个新对象以避免该错误?

此外,方法定义starts_with_a.之前有一个===,尽管变量starts_with_a没有。如果我在方法定义中省略.,则会出错。

问题2:.发生了什么?为什么有必要等等。

1 个答案:

答案 0 :(得分:0)

使用def starts_with_a. ===(e),您将在对象===上定义单例方法starts_with_a。对象和方法之间的.表示它是在该对象上定义的方法。如果您没有创建此类对象,则无法在其上定义单例方法,并将返回错误。