Tcl 如何将参数传递给 proc
Tcl How to pass arguments to a proc
我是 TCL 的新手,很难调用第三部分过程,如果我们传递如下值,它会完美地工作:
set result [3RD_par_api {{ifAdminStatus.2 Integer 1}}]
puts $result
其中 ifAdminStatus.2 是一个 OID [SNMP 对象标识符],Integer 是数据类型,要设置的值为 1。
代码工作正常,但是当我尝试使用我的脚本变量时:
set result [3RD_par_api {{$id $data $val}}]
puts $result
我收到错误 -
"illegal binding ...$id $data $val"
如何将用户定义的/变量作为参数传递给 3RD_par_api 方法,双括号中的参数是什么意思?
让我们来看看不同之处。使用单个大括号集,Tcl 将
作为单个单词的参数(在某些方面类似于其他语言中的单引号)。
但是,如果您将它作为列表访问,它会被分解成多个部分:
foreach elem {ifAdminStatus.2 Integer 1} {
puts $elem
}
ifAdminStatus.2
Integer
1
双括号:
foreach elem {{ifAdminStatus.2 Integer 1}} {
puts $elem
}
ifAdminStatus.2 Integer 1
该列表现在包含一个参数:“ifAdminStatus.2 Integer 1”。
要创建列表,请使用 list
命令:
# this is the same as {ifAdminStatus.2 Integer 1}
# it contains three strings
set arg [list ifAdminStatus.2 Integer 1]
# this is the same as {{ifAdminStatus.2 Integer 1}}
# it contains a single string
set arg [list {ifAdminStatus.2 Integer 1}]
显然 API 想要一个以单个字符串作为参数的列表。
要使用变量创建它,请使用 list
命令两次。
set id ifAdminStatus.2
set data Integer
set val 1
set arg [list [list $id $data $val]]
foreach elem $arg {
puts $elem
}
ifAdminStatus.2 Integer 1
你想尝试的是:
set result [3RD_par_api [list [list $id $data $val]]]
或者简单地说:
set result [3RD_par_api [list "$id $data $val"]]
我是 TCL 的新手,很难调用第三部分过程,如果我们传递如下值,它会完美地工作:
set result [3RD_par_api {{ifAdminStatus.2 Integer 1}}]
puts $result
其中 ifAdminStatus.2 是一个 OID [SNMP 对象标识符],Integer 是数据类型,要设置的值为 1。
代码工作正常,但是当我尝试使用我的脚本变量时:
set result [3RD_par_api {{$id $data $val}}]
puts $result
我收到错误 -
"illegal binding ...$id $data $val"
如何将用户定义的/变量作为参数传递给 3RD_par_api 方法,双括号中的参数是什么意思?
让我们来看看不同之处。使用单个大括号集,Tcl 将 作为单个单词的参数(在某些方面类似于其他语言中的单引号)。 但是,如果您将它作为列表访问,它会被分解成多个部分:
foreach elem {ifAdminStatus.2 Integer 1} {
puts $elem
}
ifAdminStatus.2
Integer
1
双括号:
foreach elem {{ifAdminStatus.2 Integer 1}} {
puts $elem
}
ifAdminStatus.2 Integer 1
该列表现在包含一个参数:“ifAdminStatus.2 Integer 1”。
要创建列表,请使用 list
命令:
# this is the same as {ifAdminStatus.2 Integer 1}
# it contains three strings
set arg [list ifAdminStatus.2 Integer 1]
# this is the same as {{ifAdminStatus.2 Integer 1}}
# it contains a single string
set arg [list {ifAdminStatus.2 Integer 1}]
显然 API 想要一个以单个字符串作为参数的列表。
要使用变量创建它,请使用 list
命令两次。
set id ifAdminStatus.2
set data Integer
set val 1
set arg [list [list $id $data $val]]
foreach elem $arg {
puts $elem
}
ifAdminStatus.2 Integer 1
你想尝试的是:
set result [3RD_par_api [list [list $id $data $val]]]
或者简单地说:
set result [3RD_par_api [list "$id $data $val"]]