【问题标题】:Eggdrop - TCL Error [wrong # args: should be "proc name args body"]Eggdrop - TCL 错误 [错误的#args:应该是“proc name args body”]
【发布时间】:2017-08-11 08:41:31
【问题描述】:

我制作了这个在 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
  }
}

非常感谢。

【问题讨论】:

  • 我建议不要结束这个问题。虽然原因确实是一个简单的印刷错误,但这是一个经常发生的错误,解决方案可能仍然有用(当然我有偏见)。

标签: tcl eggdrop


【解决方案1】:

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

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

此时,Tcl 解释器所知道的只是它正在尝试执行一个带有三个参数的命令,而它已经被赋予了四个参数。因此,错误信息非常模糊。

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

【讨论】:

  • 完美!这样就解决了。不敢相信我忽略了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多