[英]Tcl pass variable as parameters to function
使用tcl,我想將可變參數傳遞給函數。 我嘗試了這段代碼
proc launch_proc { msg proc_name {params {}} } {
puts "params launch_proc is $params \n"
}
proc test { param } {
puts "param test is $param \n"
launch_proc "1.5.2 test param" test_standard {{*}$param param1 param2 param3"
}
}
test value
-> params launch_proc為{*} $ param param1 param2 param3“ $ param未評估(我使用tcl 8.5)
Tcl支持使用關鍵字args
作為參數列表中的最后一個參數。
這是直接來自Wiki的示例:
proc demo {first {second "none"} args} {
puts "first = $first"
puts "second = $second"
puts "args = $args"
}
demo one
demo one two
demo one two three four five
結果是
first = one
second = none
args =
first = one
second = two
args =
first = one
second = two
args = three four five
您也可以為此使用expand語法,這使得以下兩個對demo
調用等效。
demo one two three four five
set params {three four five}
demo one two {*}$params
您正在傳遞列表,而需要將每個項目作為參數發送給proc。
proc test {p1 p2 p3} {
puts "$p1 - $p2 - $p3"
}
set value {one two three}
# This should work in tcl 8.5+
test {*}$value
set value {four five six}
# For tcl < 8.5
foreach {p1 p2 p3} $value {
test $p1 $p2 $p3
break
}
# or
set value {seven eight nine}
test [lindex $value 0] [lindex $value 1] [lindex $value 2]
輸出:
$ tclsh test.tcl
one - two - three
four - five - six
seven - eight - nine
您需要upvar
,並在為launch_proc構造參數列表時使用list
proc test {varname} {
upvar 1 $varname value
puts "param test is $varname => $value"
launch_proc "1.5.2 test param" test_standard [list {*}$value par1 par2 par3]
}
proc launch_proc {msg proc_name {params {}}} {
puts "params launch_proc: [join $params ,]"
}
set value {"a b c" "d e f" "g h i"}
test value
param test is value => "a b c" "d e f" "g h i"
params launch_proc: a b c,d e f,g h i,par1,par2,par3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.