Eggdrop-TCL错误[错误的#args:应该是“proc name args body”]

Eggdrop-TCL错误[错误的#args:应该是“proc name args body”],tcl,eggdrop,Tcl,Eggdrop,我制作了这个脚本,它在Eggdrop v1.6.21下运行,但是我无法启动它。我收到的错误是: 文件“eggdrop.conf”中的Tcl错误: 错误#args:应为“proc name args body” 执行时 “proc logit{nick host handle channel text}”{ 有什么问题吗?这是我的剧本 package require mysqltcl set port {3306} set host {127.0.0.1} set user {database_

我制作了这个脚本,它在Eggdrop v1.6.21下运行,但是我无法启动它。我收到的错误是:

文件“eggdrop.conf”中的Tcl错误:

错误#args:应为“proc name args body”

执行时

“proc logit{nick host handle channel text}”{

有什么问题吗?这是我的剧本

package require mysqltcl

set port {3306}
set host {127.0.0.1}
set user {database_user}
set password {database_password}
set db {database_name}

bind pubm - "*" logit

proc logit {nick uhost handle channel text} {
  global port
  global host
  global user
  global password
  global db

  if {[string match {database_name}} $channel] == 0} {
    set mysql_handler [mysqlconnect -host $host -port $port -user $user -password $password -db $db]
    set sql "insert into irc_feed (nickname, host, message) values ('[mysqlescape $nick]', '[mysqlescape $uhost]', '[mysqlescape $text]')"
    mysqlexec $mysql_handler $sql

    mysqlclose $mysql_handler
  }
}

非常感谢。

问题在于
if
条件:在
{database\u name}
之后有一个额外的
。这会导致过程主体过早关闭,并且
if
命令主体会成为
proc
的意外额外参数(最后一个右大括号变成无效命令)

这可以称为解析时错误。如果错误一直持续到执行(运行时错误),Tcl通常对情况有足够的了解,从而生成更好的错误消息

但此时,Tcl解释器所知道的是,它正试图执行一个包含三个参数的命令,并且给出了四个参数。因此,错误消息非常模糊


但是,当发出“错误的#args”错误信号时,通常会在不应该插入空格的地方插入空格,或者大括号不匹配。大括号匹配编辑器在后一种情况下非常有用。

问题在于
if
条件:在
{database\u name}之后有一个额外的
。这会导致过程主体过早关闭,并且如果命令的主体成为
proc
的意外额外参数(最后一个右括号变成无效命令)

这可以称为解析时错误。如果错误一直持续到执行(运行时错误),Tcl通常对情况有足够的了解,从而生成更好的错误消息

但此时,Tcl解释器所知道的是,它正试图执行一个包含三个参数的命令,并且给出了四个参数。因此,错误消息非常模糊


然而,当一个“错误”的参数"错误是有信号的,通常在不应该的地方插入空格,或者大括号不匹配。大括号匹配编辑器在后一种情况下非常有用。

完美!解决了它。不敢相信我忽略了它。完美!解决了它。不敢相信我忽略了它。我建议不要结束这个问题。Whil原因确实是一个简单的印刷错误,这是一个经常发生的错误,解决方案可能仍然有用(当然,我有偏见)。我建议不要结束这个问题。虽然原因确实是一个简单的印刷错误,但它是一个经常发生的错误,解决方案可能仍然有用(当然,我有偏见)。