首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未检测到升格方法

未检测到升格方法
EN

Stack Overflow用户
提问于 2014-10-20 11:03:45
回答 1查看 34关注 0票数 0

下面定义了一个具有大小写名称的方法,并试图调用它,但失败了:

代码语言:javascript
运行
复制
class Module
  def Foo; puts "foo" end
end

class A
  Foo
end
# => uninitialized constant A::Foo

我知道同名常量的存在将优先于方法查找,但在这种情况下没有这样的常量。

如果我将其作为一种方法消除歧义,则将检测到该方法:

代码语言:javascript
运行
复制
class A
  Foo()
end
# => foo

当方法名未被大小写时,查找不会失败。

代码语言:javascript
运行
复制
class Module
  def foo; puts "foo" end
end

class A
  foo
end
# => foo

为什么方法查找失败与模糊的向上大小写的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-20 11:13:27

Ruby有一个灵活的消息发送语法。特别是,您可以取消接收方,也可以取消参数列表。如果两者都做了,那么这样一个无接收者无论证的消息发送在语法上与变量取消引用是无法区分的。

因此,我们需要一些规则来消除无接收者、无论证消息发送和变量取消之间的歧义。这些规则很简单:

  • 例如变量、类变量和全局变量,不存在歧义。
  • 对于局部变量,此类构造总是被解释为消息发送,除非局部变量在作用域中,否则它将被解释为变量取消引用。
  • 对于常量,它总是被解释为变量取消引用。

由于只有在无接收者无论证的消息发送时才会出现这种歧义,因此可以通过添加接收方或参数列表来轻松解决。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26464087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档