eval

eval 能自动使用contact功能把字符串连接到一起。

1.如果其后跟的是List 那么会将List的层级减少一层

set string “Hello, World!”
set cmd [list puts stdout $string]
=> puts stdout {Hello, World!}
unset string  /*尽管此处string已被撤销,但是list其实已经生成,无碍下面调用list*/
eval $cmd     /*此处的cmd的值是一个list,根据eval会自动调用contact,而把list的最上层拿掉,保持$string的值为一个参数,尽管substituation后可能会存在空格,但依然被视为一个参数。*/
=> Hello, World!

 

如用下面用法:

set cmd “puts stdout $string”
=> puts stdout Hello, World!
eval $cmd /*因为$string里面可能含有空格,会被tcl interpretor解释成多个参数,而puts 如果在制定输出的时候,只可能有两个参数,出错而不能识别World!*/
=> bad argument “World!”: should be “nonewline”

 

2.如果其后跟的不是一个List

# PackedButton creates and packes a button.
proc PackedButton {path txt cmd {pack {-side right}} args} {
eval {button $path -text $txt -command $cmd} $args
eval {pack $path} $pack

/*此处用{pack $path} $pack会首先用contact把{pack $path}的最外一层{}拿掉,同时也把$pack的最外层拿掉,而连成一个新字串,但是pack $path中的$path所包含的依然被看成是一个参数*/
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值