首页 > 解决方案 > 什么相当于python with statement in dart

问题描述

例如,当使用 pyrogram 库启动电报客户端时,可以这样做:

with Client as app:
  app.do_something()

dart 中已经有一个 tdlib 包,虽然不像 pyrogram 。对此主题的任何帮助表示赞赏。


对于那些了解 Dart 但不了解 Python 的人来说,该with语句需要一个上下文管理器并在执行主体之前和之后执行它的一些代码。上面的代码非常大致等价于

app = Client.__enter__()
app.do_something()
app.__exit__()

除了app.__exit__()保证会被调用,即使app.do_something()引发异常。__enter__并且是由使其成为上下文管理器__exit__的类型定义的两种方法。Client

标签: pythondarttelegramwith-statement

解决方案


没有直接的 Dart 等效于 Pythonwith语句。但是,您可以使用以下模式来实现相同的行为:

void clientScope(void Function(Client) callback) {
  // Initialize your client
  final client = Client.initialize();

  // Acts as the body of a 'with' statement
  callback(client);

  // Perform any cleanup
  client.cleanup();
}

然后可以通过以下方式使用它:

clientScope((Client app) {
  app.doSomething();
});

为了健壮性,您还可以包装callback一个 try-catch-finally 并在 finally 块中执行任何清理。


推荐阅读