例如,当使用 Pyrogram 库启动 Telegram 客户端时,可以这样做:
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 中不存在与 Python with
语句等同的直接形式。但是,您可以使用以下模式来实现相同的行为:
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();
});
为了保持鲁棒性,您还可以将回调
包装在try-catch-finally中,并在finally block 中执行任何清理。
关于python - 相当于 dart 中的 python with 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59427601/