不知道我做错了什么。我试图创建一个类或模块,然后我可以使用它来调用该类/模块中的私有方法。
我得到这个错误:NoMethodError (undefined method 'call' for MixPanelService:Class)
当我试着做MixPanelService.call(shop, "install")
的时候
下面是我的简化代码:
class MixPanelService
def call(shop, event_type)
send(event_type, shop)
end
private
def install
ap "do something"
end
end
然后我尝试了一个模块,得到了以下错误:NoMethodError (undefined method 'install' for MixPanelService:Module)
当我基本上尝试相同的:MixPanelService.call(shop, "install")
代码如下:
module MixPanelService
module_function
def call(shop, event_type)
send(event_type, shop)
end
private
def install
ap "do something"
end
end
我做错了什么?
3条答案
按热度按时间eqzww0vc1#
在类中,您已经将
call
定义为一个示例方法,但您将其作为类方法调用。你可以使用def self.call
将它变成一个类方法:但这并不是最好的设计。使用类方法和传递参数很麻烦。你可以使用示例,但仍然有一个类方法来运行一切。看看这个模式:
gcxthw6b2#
这是因为
module_function
不支持这样的私有方法。它将公共示例方法复制为self模块方法,并将其作为私有示例也许它是更好地比较这种行为在行动中,它取决于你选择你需要什么
zdwk9cvp3#
这就是我遇到的问题的解决方案。现在一切正常我最终使用了
module
和self
,如下所示: