我碰巧在ruby中使用Singleton类,只记得它在factory_girl中的工作方式。他们解决了这个问题,所以你可以同时使用漫长的 Factory.create(...)
和短路 Factory(...)
我想到了它并且很想知道如何他们使班级Factory
的行为也像一种方法。
他们只是两次使用Factory
:
def Factory (args)
...
end
class Factory
...
end
我的问题是: ruby如何做到这一点?使用这种看似古怪的模式是否有危险?
答案 0 :(得分:6)
方法和变量存在于不同的命名空间中。因此,您可以使用相同名称的方法和变量(或者在本例中为常量)。但是,在使用它们时,Ruby需要能够区分它们。一般来说,这不是问题:消息有接收者,变量没有。消息有参数,变量没有。分配变量,消息不分配。
唯一的问题是当你没有接收器,没有参数和没有任务时。然后,Ruby无法区分无参数的无接收消息和变量之间的区别。因此,它必须构成一些任意规则,这些规则基本上是:
请注意,对于带参数的消息发送(即使参数列表为空),也没有歧义。
test()
:显然发送了一条消息,这里没有歧义test
:可能是消息发送或变量;解决规则说它是一个消息发送(除非之前已经分配给test
)Test()
:显然发送了一条消息,这里没有歧义self.Test
:也显然是一条消息发送,这里没有歧义Test
:可能是消息发送或常量;决议规则说这是一个常数