轻灵,内省,质朴,有为

一个GitHub上的Tcl语法糖:with

+1 投票

@玄简 分享的一个GitHub上的Tcl项目:github:cyrilthomas/with


简单说就是一个语法糖(Syntax Sugar)。下面是其主页上介绍的一个例子。
Code: with-usage.tcl
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 命令。

该语法糖的实现基本上就是

Code: with-impl.tcl
proc with {chan as varname body} {
  upvar $varname var
  set var $chan

  # 执行
  uplevel $body

  # 关闭句柄
  close $var 
}
如果不用这个"with"扩展,类似的写法,大概可以如下
Code: with-try.tcl
try {
  set file [open "/tmp/a" "a+"]

  puts $file "hello world" 
} finally {
  close $file
}

这个语法糖的好处是给了扁平的代码结构一个段落层次。至于你是否真的会去使用,那就见仁见智吧。

最新提问 9月 1, 2015 分类:语法命令 | 用户: 风行水上 (-30 分)
修改于 9月 1, 2015 用户:风行水上
try finally 真不错啊,在 return 的时候都能保证执行。不仅可以在关文件的时候用,还可以在函数退出时回收 tcloo 对象的时候用。学习了!

登录 或者 注册 后回答这个问题。

...