【问题标题】:Does monocle use a bad example for event driven programming?单片眼镜是否使用了事件驱动编程的坏例子?
【发布时间】:2011-05-22 08:51:50
【问题描述】:

https://github.com/saucelabs/monocle

以下代码作为标准事件驱动编程的示例给出:

def get_cmd(conn): conn.read_until("\n", callback=handle_cmd) def handle_cmd(conn, cmd): 如果 cmd.type == “获取地址”: # 跟踪 conn 以便我们可以写回响应! def 回调(结果): 处理用户查询结果(conn,结果) db.query(cmd.username, 回调) 别的: conn.write("未知命令") def handle_user_query_result(conn,用户): conn.write(user.address)

虽然我不明白为什么需要关闭。 “跟踪连接”与第一个函数“get_cmd”的工作方式相矛盾。另外,事件驱动框架通常不让你传递参数吗?

我猜这是一个更合理的例子:

def get_cmd(conn): conn.read_until("\n", callback=handle_cmd) def handle_cmd(conn, cmd): 如果 cmd.type == “获取地址”: db.query(cmd.username, callback=handle_user_query_result, params=conn) 别的: conn.write("未知命令") def handle_user_query_result(结果,参数): 用户 = 结果 conn = 参数 conn.write(user.address)

我错了吗?

【问题讨论】:

    标签: python event-handling yield


    【解决方案1】:

    我会说这是一个糟糕的例子,因为它并没有说明基于回调的事件编程有多糟糕。闭包不是必需的,但它(大概)用于保持逻辑组织,使代码更易于阅读/推理。将回调编写为闭包是很常见的。该示例的全部目的是说明避免回调如何使代码更简洁,可以说更容易读/写/推理。我个人不喜欢基于回调的编程,最近使用过twistednode.js。去写一个应用程序,然后你会喜欢 monocle 的方法(或者不是,有些人更喜欢基于回调的方法)。

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 2021-11-23
      • 2011-04-23
      • 2015-10-06
      • 1970-01-01
      • 2014-01-03
      • 2023-04-06
      • 2011-05-02
      相关资源
      最近更新 更多