Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
无法放入tcl脚本_Tcl - Fatal编程技术网

无法放入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

我正在尝试在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]
}
_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只理解两种引用:

  • 带替换的引用:
  • 引用而不替换:
    {}
  • 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
    的智能引号(
    )中的引号不是纯引号(
    )?