无法放入tcl脚本
我正在尝试在tcl中创建一个跟踪函数。该函数将列出所有被调用的过程/嵌套调用及其参数。下面是脚本无法放入tcl脚本,tcl,Tcl,我正在尝试在tcl中创建一个跟踪函数。该函数将列出所有被调用的过程/嵌套调用及其参数。下面是脚本 rename proc _proc proc proc {nm params body} { _proc $nm $params $body trace add execution $nm enter [list track_entry $nm $params] trace add execution $nm leave [list track_leave $nm] } _p
rename proc _proc
proc proc {nm params body} {
_proc $nm $params $body
trace add execution $nm enter [list track_entry $nm $params]
trace add execution $nm leave [list track_leave $nm]
}
_proc track_entry {nm params real args} {
puts "Enter proc $nm"
foreach formal $params actual [lrange $real 1 end] {
append p " [lindex $formal 0]=$actual,"
}
puts "Parameters:$p and body"
}
_proc track_leave {nm args} {
puts "Exit proc $nm"
}
proc test1 { param1 param2 } {
puts “parameters are $param1 and $param2”
test2 value1
}
proc test2 { value} {
puts “value is $value”
}
我的产量越来越低
test1 arg1 arg2
Enter proc test1
Parameters: param1=arg1, param2=arg2, and body
Exit proc test1
wrong # args: should be "puts ?-nonewline? ?channelId? string"
如果您发布的内容是正确的,那么问题在于您没有使用正确的引用字符 Tcl只理解两种引用:
”
{}
“
将被视为任何其他字符,例如a
或5
请注意,在不加引号的情况下,tcl将单词视为不带空格的字符串。例如,以下示例均为有效字符串:
this_is_a_valid_string
"this_is_a_valid_string"
{this_is_a_valid_string}
遵循此简单规则,以下字符串也是有效字符串,并且都是等效的:
“hello
"“hello"
{“hello}
因此,当您要求tcl执行以下操作时:
puts “parameters are $param1 and $param2”
它将其视为:
puts {“parameters} {are} "$param1" {and} "$param2”"
将5个参数传递给会放入
显然,这会触发一个错误,因为puts需要一个或两个参数。如果您发布的内容正确,问题是您没有使用正确的引用字符
Tcl只理解两种引用:
带替换的引用:”
引用而不替换:{}
tcl中的字符“
将被视为任何其他字符,例如a
或5
请注意,在不加引号的情况下,tcl将单词视为不带空格的字符串。例如,以下示例均为有效字符串:
this_is_a_valid_string
"this_is_a_valid_string"
{this_is_a_valid_string}
遵循此简单规则,以下字符串也是有效字符串,并且都是等效的:
“hello
"“hello"
{“hello}
因此,当您要求tcl执行以下操作时:
puts “parameters are $param1 and $param2”
它将其视为:
puts {“parameters} {are} "$param1" {and} "$param2”"
将5个参数传递给会放入
显然,这会触发一个错误,因为puts需要一个或两个参数。如果您发布的内容正确,问题是您没有使用正确的引用字符
Tcl只理解两种引用:
带替换的引用:”
引用而不替换:{}
tcl中的字符“
将被视为任何其他字符,例如a
或5
请注意,在不加引号的情况下,tcl将单词视为不带空格的字符串。例如,以下示例均为有效字符串:
this_is_a_valid_string
"this_is_a_valid_string"
{this_is_a_valid_string}
遵循此简单规则,以下字符串也是有效字符串,并且都是等效的:
“hello
"“hello"
{“hello}
因此,当您要求tcl执行以下操作时:
puts “parameters are $param1 and $param2”
它将其视为:
puts {“parameters} {are} "$param1" {and} "$param2”"
将5个参数传递给会放入
显然,这会触发一个错误,因为puts需要一个或两个参数。如果您发布的内容正确,问题是您没有使用正确的引用字符
Tcl只理解两种引用:
带替换的引用:”
引用而不替换:{}
tcl中的字符“
将被视为任何其他字符,例如a
或5
请注意,在不加引号的情况下,tcl将单词视为不带空格的字符串。例如,以下示例均为有效字符串:
this_is_a_valid_string
"this_is_a_valid_string"
{this_is_a_valid_string}
遵循此简单规则,以下字符串也是有效字符串,并且都是等效的:
“hello
"“hello"
{“hello}
因此,当您要求tcl执行以下操作时:
puts “parameters are $param1 and $param2”
它将其视为:
puts {“parameters} {are} "$param1" {and} "$param2”"
将5个参数传递给会放入
显然,这会触发一个错误,因为puts需要一个或两个参数。为什么您的引号在最后两个proc
的智能引号(”
)中,而不是纯引号(”
)?为什么您的引号在最后两个proc
的智能引号()中,而不是纯引号(”
)?为什么您在最后两个proc
的智能引号(”
)中的引号不是纯引号(”
)?为什么您在最后两个proc
的智能引号(”
)中的引号不是纯引号(”
)?