python - 什么相当于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
解决方案
没有直接的 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 块中执行任何清理。
推荐阅读
- javascript - 在 React Router 中传递数据
- azure-devops - 用户无法在 Azure DevOps 的 sprint 上配置任务板设置
- java - Java中的SOAP消息,WSDL URL替代
- perl - perlcritic 消息:在 void 上下文中使用的映射
- c# - HiQPdf 没有在 pdf 上呈现 Chart.js 图表
- java - 解析多维 JSON 数组错误
- javascript - Next JS 和 Vercel - 开发与生产
- javascript - 使用 lodash 迭代数组和过滤器
- javascript - Selenium JavaScript - 如何在 Jest 测试用例中设置测试 ID
- swift - 如何在小部件 iOS14 中刷新多个计时器?