Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 在TCL过程中是否可以按名称传递参数?_Function_Variables_Arguments_Tcl_Procedure - Fatal编程技术网

Function 在TCL过程中是否可以按名称传递参数?

Function 在TCL过程中是否可以按名称传递参数?,function,variables,arguments,tcl,procedure,Function,Variables,Arguments,Tcl,Procedure,我有以下程序: proc test {a {b 10} {c 30}} { puts "$a $b $c" } 我想通过将值传递给参数a和c来调用测试过程,并保留参数b的默认值。换句话说,我想按名称传递参数值 是否可以在TCL中执行此操作?否 通常的方法是: proc test { args } { # set up the defaults set a(-a) {} set a(-b) 10 set a(-c) 30 set len [l

我有以下程序:

proc test {a {b 10} {c 30}} {
    puts "$a $b $c"
}
我想通过将值传递给参数a和c来调用测试过程,并保留参数b的默认值。换句话说,我想按名称传递参数值

是否可以在TCL中执行此操作?

通常的方法是:

proc test { args } {
  # set up the defaults
  set a(-a) {}
  set a(-b) 10
  set a(-c) 30
  
  set len [llength $args]
  # some basic argument checking
  if { $len > 6 || $len < 2 || $len % 2 != 0 } {
    error "Invalid arguments"
  }
  array set a $args
  ...
}

set result [test -a 3 -c 40]
proc test{args}{
#设置默认值
设置一个(-a){}
a组(-b)10
设置a(-c)30
设置长度[L长度$args]
#一些基本的参数检查
如果{$len>6 | |$len<2 | |$len%2!=0}{
错误“无效参数”
}
数组设置为$args
...
}
设定结果[测试-a 3-c 40]

通常的方法是:

proc test { args } {
  # set up the defaults
  set a(-a) {}
  set a(-b) 10
  set a(-c) 30
  
  set len [llength $args]
  # some basic argument checking
  if { $len > 6 || $len < 2 || $len % 2 != 0 } {
    error "Invalid arguments"
  }
  array set a $args
  ...
}

set result [test -a 3 -c 40]
proc test{args}{
#设置默认值
设置一个(-a){}
a组(-b)10
设置a(-c)30
设置长度[L长度$args]
#一些基本的参数检查
如果{$len>6 | |$len<2 | |$len%2!=0}{
错误“无效参数”
}
数组设置为$args
...
}
设定结果[测试-a 3-c 40]

这是正确的。可以使用
tcl::prefix
命令执行更复杂的版本。多年来,人们一直在争论如何通过点名进行绑定,但始终没有得出结论性的答案;平衡所有不同的需求是很困难的,这是正确的。可以使用
tcl::prefix
命令执行更复杂的版本。多年来,人们一直在争论如何通过点名进行绑定,但始终没有得出结论性的答案;平衡所有不同的需求是很棘手的。