我有一类和模块,具有相同的名称:参考方法模块名称相同
module Pushover
def configure
..
end
end
module MyModule
class Pushover
def blah
Pushover.configure
end
end
end
这并不工作,因为Pushover.configure
呼叫定向到包含类。现在,一个明显的解决办法是重命名类。但是,该模块来自gem,并且该类符合DSL中要求的命名约定。所以理想情况下,他们应该保持不变。我也可以创建第二个助手类并通过它来调用,但这一切似乎都有些诡异。我的首选解决方案是直接引用模块方法。
围绕此区域的所有现有问题似乎都是在相反的方向上消歧 - 即他们希望获取类引用而不是模块。
当我指定Pushover
时,有什么方法可以告诉Ruby我是指模块而不是类?
为什么你必须命名模块'Pushover'和'Pushover'类在另一个模块中是一样的东西?这看起来像是在寻找麻烦,尤其是长期来说,如果你必须进行调试或维护。 –
我同意。但是,我没有太多的选择。我正在使用其他人的宝石为其他人的应用程序提供补丁。如果我将类名更改为MyModule :: PushoverNotifier,那么使用它的“DSL”看起来很奇怪。 (这是用于备份gem btw。)。用户目前可以执行'notify_by Twitter'或'notify_by Mail'。所以'通过Pushover通知'似乎是一个逻辑扩展,而不是'notify_by PushoverNotifier',这是标准的一个例外。 –
呃。那时候,由于别人的选择,当你回到角落时,维护代码变得很难看。我感到你的痛苦。 –