Eggdrop - TCL 错误 [错误的#args:应该是 "proc name args body"]
Eggdrop - TCL Error [wrong # args: should be "proc name args body"]
我已经在 Eggdrop v1.6.21 下制作了这个 运行 的脚本,但我无法启动它。我收到的错误是:
Tcl error in file 'eggdrop.conf':
wrong # args: should be "proc name args body"
while executing
"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_name}
后面多了一个}
。它导致过程的主体被过早关闭,并且 if
命令的主体成为 proc
的意外额外参数(并且最后一个右大括号成为无效命令)。
这可以称为解析时错误。如果错误一直到执行(运行 次错误)Tcl 通常对情况有足够的了解以产生更好的错误消息。
虽然此时,Tcl 解释器所知道的只是它正在尝试执行一个带有三个参数的命令,而它已被赋予四个参数。因此,错误信息非常模糊。
但是,当发出 "wrong # args" 错误信号时,通常是在不应该插入的地方插入了 white-space,或者大括号不匹配。大括号匹配编辑器在后一种情况下非常有用。
我已经在 Eggdrop v1.6.21 下制作了这个 运行 的脚本,但我无法启动它。我收到的错误是:
Tcl error in file 'eggdrop.conf':
wrong # args: should be "proc name args body"
while executing
"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_name}
后面多了一个}
。它导致过程的主体被过早关闭,并且 if
命令的主体成为 proc
的意外额外参数(并且最后一个右大括号成为无效命令)。
这可以称为解析时错误。如果错误一直到执行(运行 次错误)Tcl 通常对情况有足够的了解以产生更好的错误消息。
虽然此时,Tcl 解释器所知道的只是它正在尝试执行一个带有三个参数的命令,而它已被赋予四个参数。因此,错误信息非常模糊。
但是,当发出 "wrong # args" 错误信号时,通常是在不应该插入的地方插入了 white-space,或者大括号不匹配。大括号匹配编辑器在后一种情况下非常有用。