Ruby on rails ruby如何允许方法和类具有相同的名称?
我碰巧正在用ruby编写一个单例类,我刚刚想起了它在ruby中的工作方式。他们解决了这个问题,这样你就可以同时使用长程工厂。创建(…)和短程工厂(…)我想了想,很好奇他们是如何让类Ruby on rails ruby如何允许方法和类具有相同的名称?,ruby-on-rails,ruby,design-patterns,programming-languages,Ruby On Rails,Ruby,Design Patterns,Programming Languages,我碰巧正在用ruby编写一个单例类,我刚刚想起了它在ruby中的工作方式。他们解决了这个问题,这样你就可以同时使用长程工厂。创建(…)和短程工厂(…)我想了想,很好奇他们是如何让类工厂也像一个方法一样工作的 他们简单地使用了工厂两次,如下所示: def Factory (args) ... end class Factory ... end 我的问题是:ruby是如何做到这一点的?使用这种看似古怪的模式有危险吗?方法和变量存在于不同的名称空间中。因此,您可以使用相同名称的方法和变量(
工厂也像一个方法一样工作的
他们简单地使用了工厂
两次,如下所示:
def Factory (args)
...
end
class Factory
...
end
我的问题是:ruby是如何做到这一点的?使用这种看似古怪的模式有危险吗?方法和变量存在于不同的名称空间中。因此,您可以使用相同名称的方法和变量(或者在本例中是常量)。然而,在使用它们时,Ruby需要能够区分它们。一般来说,这不是问题:消息有接收者,变量没有。消息有参数,变量没有。变量已分配给,消息未分配
唯一的问题是当你没有接受者,没有论点,也没有赋值。然后,Ruby无法区分没有参数的无接收者消息发送和变量发送之间的区别。因此,它必须制定一些武断的规则,这些规则基本上是:
- 对于以小写字母开头的不明确标记,最好将其解释为消息发送,除非您确实知道它是一个变量(即解析器(而不是(!)解释器)以前见过赋值)
- 对于以大写字母开头的不明确标记,首选将其解释为常量
请注意,对于带有参数的消息发送(即使参数列表为空),也没有歧义
test()
:显然是一个消息发送,这里没有歧义
测试
:可能是消息发送或变量;解析规则说这是一个消息发送(除非之前有分配给test
的任务)
Test()
:显然是一个消息发送,这里没有歧义
self.Test
:显然也是一个消息发送,这里没有歧义
测试
:可能是消息发送或常量;决议规则说这是一个常数