[编辑]很抱歉标题被取消了。我在想我遇到的另一个问题,不小心把这两个问题交叉了。你知道吗
大家好,我正在用Python编写IRC机器人骨架。你知道吗
为了在我提问之前解释一些事情,我正在编写一个IRC bot,它带有一个插件系统,该插件系统将接收信号(即,当接收到消息时,看到一个人正在加入一个通道,…),为了调用插件中包含的这些函数,我将使用一个helper方法,即,如果我们看到一条消息,则调用sawMessage
。sawMessage
将使用PluginManager
类来定位要处理消息的插件。我已经考虑好了整个系统。你知道吗
我还为每个IRC操作提供了一个函数,即“doJoin”、“doPart”等,这样插件就可以调用它们,而不必直接将套接字连接暴露给插件。--这些函数是否应该自动调用相应的sawMessage
、sawJoin
等?或者应该由插件在调用doMessage
之后调用sawMessage
?我问这个问题的原因是,如果doMessage
调用sawMessage
,并且sawMessage
处理调用doMessage
的内容,那么在展开堆栈之前它可能会递归很多次。你知道吗
让插件负责调用sawMessage
来通知其他插件的缺点是,插件可以选择不通知其他插件,而且如果插件确实调用了sawMessage
函数,则递归问题可能会立即出现。你知道吗
我不知道怎么解决这个问题。使doMessage
自动调用sawMessage
来通知其他插件似乎是一种好的做法,但是如果插件的设计不正确(即不响应它自己的消息),则总是有可能由于递归而导致堆栈溢出,但是如果插件无论如何都必须调用sawMessage
,那么同样的问题也存在。你知道吗
对此有什么想法/意见吗?我知道这不是一个直截了当的问题/答案,但我不能决定该怎么办。通常,如果我只是为自己的使用编写一个小机器人,我不会关心可能的递归问题。然而,我写这篇文章是为了发行(我希望这是下一个巨大的机器人,就像其他IRC机器人开发者一样:D)并且我希望它做得合适。你知道吗
谢谢!你知道吗
听起来您需要在Publish/subscribe和Chain of Responsibility之间做出决定,或者阅读更多内容。不幸的是,我在这方面没有多少经验。最近碰巧读了一篇相关的article。你知道吗
相关问题 更多 >
编程相关推荐