我碰巧正在用 ruby 开发 Singleton 类,只记得它的工作方式工厂女工。他们解决了这个问题,所以你可以同时使用漫长的路 Factory.create(...)
and 捷径 Factory(...)
我想了想,很好奇他们是如何上课的Factory
也表现得像一个方法。
他们只是简单地使用了Factory
像这样两次:
def Factory (args)
...
end
class Factory
...
end
我的问题是:Ruby 是如何实现这一点的呢?使用这种看似古怪的模式有危险吗?
方法和变量位于不同的命名空间中。因此,您可以同时使用同名的方法和变量(或者在本例中为常量)。然而,在使用它们时,Ruby 需要能够区分它们。一般来说,这不是问题:消息有接收者,而变量没有。消息有参数,而变量没有。变量被分配,消息则没有。
唯一的问题是当你没有接收者、没有参数、也没有分配时。然后,Ruby 无法区分不带参数的无接收者消息发送和变量之间的区别。因此,它必须制定一些任意规则,这些规则基本上是:
- 对于以小写字母开头的不明确标记,更愿意将其解释为消息发送,unless你肯定知道它是一个变量(即parser(不是(!)解释器)之前见过作业)
- 对于以大写字母开头的不明确标记,更愿意将其解释为常量
请注意,对于带有参数的消息发送(即使参数列表为空),不存在歧义。
-
test()
:显然是一条消息发送,这里没有歧义
-
test
:可能是发送的消息或变量;解析规则说这是一条消息发送(除非已分配给test
before)
-
Test()
:显然是一条消息发送,这里没有歧义
-
self.Test
: also显然是一条消息发送,这里没有歧义
-
Test
:可能是发送的消息或常量;解析规则说它是一个常数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)