{*}与像tcl中的{*}args这样的args一起使用时,它的意义是什么

{*}与像tcl中的{*}args这样的args一起使用时,它的意义是什么,tcl,Tcl,当与args类似{*}args一起使用时,{*}的意义是什么? 例如:如何在类方法中使用以下内容 next a {*}$args b 不同于使用 next a $args b 它是参数/列表展开运算符。它将列表转换为许多单个单词 它作为tcl语法规则的一部分进行了记录:。这是第五条规则 例如,假设您有一个列表: set foo {a b c d} 然后调用命令: bar $foo 该命令将被解释为: bar "a b c d" bar a b c d 但如果你这样做: bar {*

当与
args
类似
{*}args
一起使用时,
{*}
的意义是什么? 例如:如何在类方法中使用以下内容

next a {*}$args b 
不同于使用

next a $args b

它是参数/列表展开运算符。它将列表转换为许多单个单词

它作为tcl语法规则的一部分进行了记录:。这是第五条规则

例如,假设您有一个列表:

set foo {a b c d}
然后调用命令:

bar $foo
该命令将被解释为:

bar "a b c d"
bar a b c d
但如果你这样做:

bar {*}$foo
然后,该命令将被解释为:

bar "a b c d"
bar a b c d

它是参数/列表展开运算符。它将列表转换为许多单个单词

它作为tcl语法规则的一部分进行了记录:。这是第五条规则

例如,假设您有一个列表:

set foo {a b c d}
然后调用命令:

bar $foo
该命令将被解释为:

bar "a b c d"
bar a b c d
但如果你这样做:

bar {*}$foo
然后,该命令将被解释为:

bar "a b c d"
bar a b c d

{*}
将列表元素拼接为单个参数,而不是将整个列表拼接为单个参数。

{*}
将列表元素拼接为单个参数,不是将整个列表作为单个参数。

您可以通过将命令
list
放在调用前面,在交互式shell中自己看到差异:

list next a {*}$args b 
list next a $args b

args
设置为某个值(最好是某个列表值),运行上述操作,您将看到调用的实际外观。

您可以在交互式shell中通过将命令
list
放在调用前面来查看差异:

list next a {*}$args b 
list next a $args b

args
设置为某个值(最好是某个列表值),运行上面的操作,您将看到调用的实际外观。

我强烈建议您通读tcl语法规则。与其他语言不同,tcl的整个语法规则可以放在一个页面中(只有12条规则),tcl 8.5中添加了
{*}
语法(从技术上讲它不是运算符),以解决在许多用例中正确使用
eval
的困难。问题出在哪里?
eval
的大多数用法都是错误的,整个过程通常也很慢。我强烈建议您通读tcl语法规则。与其他语言不同,tcl的整个语法规则可以放在一个页面中(只有12条规则),tcl 8.5中添加了
{*}
语法(从技术上讲它不是运算符),以解决在许多用例中正确使用
eval
的困难。问题出在哪里?
eval
的大多数用法都是错误的,而且整个过程通常也很慢。