TCL中switch命令行为异常:预期输出不符问题咨询
问题原因
TCL的switch命令默认将每个匹配模式视为字面字符串,不会自动对模式中的变量进行插值。你的代码里,模式$a被当作字符串"$a"与$data的值"10"做精确匹配,两者不相等,因此触发了default分支。
修复方法
有两种简单的修复方式:
方式一:给变量模式添加双引号
通过双引号让TCL先对变量$a进行插值,将其替换为实际值10后再参与匹配:
set a 10 set data 10 switch $data { "$a" { puts "10" } default { puts "Default" } }
方式二:使用-expand选项(TCL 8.5+支持)
如果你的TCL版本是8.5及以上,可以使用-expand选项,让switch自动展开模式中的变量:
set a 10 set data 10 switch -expand $data { $a { puts "10" } default { puts "Default" } }
内容的提问来源于stack exchange,提问作者BT10
相关产品推荐
相关产品推荐

