use在序列表达式中使用通配符模式,但不能在其他情况下使用。是否有一个原因?
let mkDisposable() =
{ new IDisposable with
member __.Dispose() = () }
let mkSeq() =
seq {
use _ = mkDisposable() //OK
()
}
let f() =
use _ = mkDisposable() //ERROR: 'use' bindings must be of the form 'use <var> = <expr>'
()
Run Code Online (Sandbox Code Playgroud)
我相信这是计算表达式(在本例中为序列表达式,但此行为适用于所有计算表达式)脱糖的自然(但意外)结果。 正如规格所示,
use pat = expr
cexpr
Run Code Online (Sandbox Code Playgroud)
被翻译成
Using(expr, fun pat -> cepxr)
Run Code Online (Sandbox Code Playgroud)
因为这是浅层语法翻译,所以您可以使用编写函数时可以使用的任何模式,包括_. 但是,对于普通use绑定,绑定的左侧必须是标识符,而不是模式(请参阅规范的第 6.6.3 节)。
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |