存在一个 TCL 脚本,该脚本具有多个名称相似的过程定义func
在不同的命名空间中。程序如下:
proc func {a} {
puts $a
}
所有这类程序都只有一个参数a
。所有此类过程都是从整个脚本中的一行调用的:
func $a
我需要创建另一个具有相似名称的过程定义func
在其他命名空间中。但该过程将有两个参数。该过程还需要从同名的其他过程的同一行调用。程序如下所示:
proc func {a b} {
puts $a
puts $b
}
我现在需要修改调用所有这些过程的行func $a
因此,它可以调用具有一个参数的所有过程和具有两个参数的新过程。但不得更改带有一个参数的过程定义。哪一行调用所有这些过程func $a
应该是什么样子?
如果您想要一个可选参数,并且您知道如果未提供可选值应该是什么,则可以执行以下操作:
proc func {a {b "the default"}} {
puts "a is $a"
puts "b is $b"
}
如果您需要在运行时计算默认值,最简单的技术是在实际输入中不太可能出现的神奇哨兵值。比如两个 ASCII NUL 字符(== Unicode U+000000):
proc func {a {b "\u0000\u0000"}} {
if {$b eq "\u0000\u0000"} {
set b "default:$a"
}
puts "a is $a"
puts "b is $b"
}
否则,你可以使用魔法args
value 来获取完整的参数列表并“手动”完成所有工作:
proc func {a args} {
if {[llength $args] == 0} {
set b "the default..."
} elseif {[llength $args] == 1} {
set b [lindex $args 0]
} else {
error "bad number of arguments!"
}
puts "a is $a"
puts "b is $b"
}
如果你这样做的话,info level
内省者可以提供帮助,但事情可能会变得复杂......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)