下面定义了一个具有大小写名称的方法,并试图调用它,但失败了:
class Module
def Foo; puts "foo" end
end
class A
Foo
end
# => uninitialized constant A::Foo我知道同名常量的存在将优先于方法查找,但在这种情况下没有这样的常量。
如果我将其作为一种方法消除歧义,则将检测到该方法:
class A
Foo()
end
# => foo当方法名未被大小写时,查找不会失败。
class Module
def foo; puts "foo" end
end
class A
foo
end
# => foo为什么方法查找失败与模糊的向上大小写的方法?
发布于 2014-10-20 11:13:27
Ruby有一个灵活的消息发送语法。特别是,您可以取消接收方,也可以取消参数列表。如果两者都做了,那么这样一个无接收者无论证的消息发送在语法上与变量取消引用是无法区分的。
因此,我们需要一些规则来消除无接收者、无论证消息发送和变量取消之间的歧义。这些规则很简单:
由于只有在无接收者无论证的消息发送时才会出现这种歧义,因此可以通过添加接收方或参数列表来轻松解决。
https://stackoverflow.com/questions/26464087
复制相似问题