簡體   English   中英

Tcl將變量作為參數傳遞給函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM