tcl proc {agr}

凌风羽化 发布于 2014/08/27 16:59
阅读 1K+
收藏 0
Tcl

解释一下下面tcl程序运行的思路,自己突然对这一块糊涂了,觉得理清这一块,tcl就小成了。

proc testf {fach} {
    testc $fach
    testc fach
    return $fach
}
proc testc {fa} {
    
     upvar $fa fach1
     incr fach1
     puts $fach1
     puts $fa
    
}
puts [testf 4]

结果为:

加载中
0
MikeManilone
MikeManilone

挺早就看到问题了,但是因为网络问题一直没回答。因为详细解释就成人肉单步调试了,我嫌麻烦,就简单以testc 4为例吧。

testf 调用 testc 4,testc 中 upvar 会在 testf 中拿到名字叫“4”的变量的引用,然后 incr 会在 testf 中创建这个变量,即4的值是1。

MikeManilone
MikeManilone
回复 @凌风羽化 : 通过有没有 $ 来表达函数有没有破坏性,也是tcl的一种特点,当然,是语言本身造成的。
凌风羽化
凌风羽化
回复 @MikeManilone : 再就是,通过用upvar 要改变testf 中的局部变量时为什么要用 testc fach,而不可以是testc $fach。这是语法规定吗?
凌风羽化
凌风羽化
回复 @MikeManilone : 其实我主要想问的是testc $fach和testc fach的区别。testc $fach 即testc 4,这个参数传过去是算是变量值还是变量名,按你的说法是变量名吗?那testc ​fach? @​MikeManilone​
MikeManilone
MikeManilone
关于Tcl/Tk,可以加这个QQ群 325890007
0
MikeManilone
MikeManilone

引用来自“MikeManilone”的评论

挺早就看到问题了,但是因为网络问题一直没回答。因为详细解释就成人肉单步调试了,我嫌麻烦,就简单以testc 4为例吧。

testf 调用 testc 4,testc 中 upvar 会在 testf 中拿到名字叫“4”的变量的引用,然后 incr 会在 testf 中创建这个变量,即4的值是1。

回复 @凌风羽化 : Tcl重要的是Everything is a String,4过去是变量名,而 fach 过去也是变量名,等于 testc "4" 和 testc "fach"。而 test $fach 相当于 test [set fach],这里的 set fach 就不可能是 set $fach,否则会解释成 set [set fach],这也是 Tcl 好玩的一个地方。

set set set
set $set $set
$set set [set [set $set]]



什么的……

返回顶部
顶部