1

以下代码来自《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:这是怎么.回事?为什么有必要等等。

4

1 回答 1

0

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

于 2012-12-29T06:30:44.427 回答