@玄简 分享的一个GitHub上的Tcl项目:github:cyrilthomas/with
package require "with" with [open "/tmp/a" "a+"] as file { puts $file "hello world" } # 实际上就相当于 set file [open "/tmp/a" "a+"] puts $file "hello world" close $file
可以看出,跟正统的写法比,主要是少了显式的 close 命令。
该语法糖的实现基本上就是
proc with {chan as varname body} { upvar $varname var set var $chan # 执行 uplevel $body # 关闭句柄 close $var }
try { set file [open "/tmp/a" "a+"] puts $file "hello world" } finally { close $file }
这个语法糖的好处是给了扁平的代码结构一个段落层次。至于你是否真的会去使用,那就见仁见智吧。