【发布时间】:2011-09-06 17:19:49
【问题描述】:
[编辑] 抱歉标题被关闭了。我正在考虑我遇到的另一个问题,并且不小心跨越了这两个问题。
大家好,我目前正在用 Python 编写 IRC 机器人骨架。
在我提出问题之前,为了解释几件事,我正在编写一个 IRC 机器人,它配有一个可以接收信号的插件系统(即,当收到一条消息时,有人看到一个人加入了一个频道,...... ),并调用插件中包含的这些函数,我将使用辅助方法,即如果我们看到一条消息,请调用sawMessage。 sawMessage 将使用PluginManager 类等定位要处理消息的插件。我已经考虑了整个系统。
我还为每个 IRC 操作提供了一个函数,即“doJoin”、“doPart”等,这样插件就可以调用它们,而无需我直接将我的套接字连接暴露给插件。 -- 这些函数是否应该自动调用相应的sawMessage、sawJoin等?还是应该由插件在调用doMessage之后调用sawMessage?我问的原因是因为如果doMessage 调用sawMessage,并且sawMessage 处理调用doMessage 的东西,它最终可能会在展开堆栈之前递归很多。
让插件负责调用sawMessage来通知其他插件的缺点是插件可以选择不通知其他插件,而且如果插件-在调用sawMessage 函数时,递归问题可能会立即弹出。
我不确定如何解决这个问题。让doMessage自动调用sawMessage通知其他插件似乎是个好习惯,但是如果插件设计不当(即不响应它是自己的消息),但如果插件无论如何都必须调用sawMessage,则会出现同样的问题。
对此有任何想法/意见吗?我知道这不是一个直截了当的问题/答案,但我无法决定如何处理。通常,如果我只是为自己编写一个小型机器人,我不会关心可能的递归问题。然而,我写这篇文章的目的是为了分发(我希望它成为下一个 HUGE bot,就像所有其他 IRC bot 开发人员一样 :D )并且我希望它能够正确制作。
谢谢!
【问题讨论】:
-
如果实现难以解释,那就是个坏主意。
__import__('this') -
下一个“巨大”的机器人将被分发。想想天网。
-
@JBernardo +1 引用 The Zen of Python
-
@JBernardo - 抱歉标题,我不小心遇到了两个问题。你不只是喜欢多任务吗? :p