Chapel 是否有类似于 Python 上下文管理器的东西?
Does Chapel have something similar to a Python context manager?
在Python中,您可以使用上下文管理器在代码块内分配和释放资源,例如本例中在with
块范围内打开和关闭文件句柄:
with open('some_file', 'w') as opened_file:
opened_file.write('Can Chapel do this!?')
Chapel 中是否存在类似的功能?如果是这样,您将如何将上述代码示例翻译成 Chapel?
Chapel 通过 manage
statement 在 Chapel 1.25 中引入了上下文管理器支持。
这是上面的类似示例。请注意,内置类型还不包括上下文管理工作所必需的 enterThis()
和 leaveThis()
方法。因此,我们需要在使用 Chapel 1.25 中的 manage 语句之前定义这些方法。这在未来的版本中应该不是必需的。
use IO;
// This should be part of standard library eventually
proc file.enterThis() ref { return this; }
proc file.leaveThis(in err: owned Error?) { this.close(); }
manage open('some_file.txt', iomode.cw) as f {
var w = f.writer();
w.write('yes');
}
在Python中,您可以使用上下文管理器在代码块内分配和释放资源,例如本例中在with
块范围内打开和关闭文件句柄:
with open('some_file', 'w') as opened_file:
opened_file.write('Can Chapel do this!?')
Chapel 中是否存在类似的功能?如果是这样,您将如何将上述代码示例翻译成 Chapel?
Chapel 通过 manage
statement 在 Chapel 1.25 中引入了上下文管理器支持。
这是上面的类似示例。请注意,内置类型还不包括上下文管理工作所必需的 enterThis()
和 leaveThis()
方法。因此,我们需要在使用 Chapel 1.25 中的 manage 语句之前定义这些方法。这在未来的版本中应该不是必需的。
use IO;
// This should be part of standard library eventually
proc file.enterThis() ref { return this; }
proc file.leaveThis(in err: owned Error?) { this.close(); }
manage open('some_file.txt', iomode.cw) as f {
var w = f.writer();
w.write('yes');
}