以下代码来自 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:.
发生了什么?为什么有必要等等。
答案 0 :(得分:0)
使用def starts_with_a. ===(e)
,您将在对象===
上定义单例方法starts_with_a
。对象和方法之间的.
表示它是在该对象上定义的方法。如果您没有创建此类对象,则无法在其上定义单例方法,并将返回错误。