我已经制作了这个运行在Eggdrop v1.6.21下的脚本,但是我无法启动它。我收到的错误是:
文件‘茄子’中的Tcl错误: 错误# args:应该是"proc name args body“ 执行时 "proc logit {nick主机句柄通道文本}{
有什么问题吗?这是我的剧本。
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
}
}非常感谢。
发布于 2017-08-11 09:00:19
问题是在if条件下:在{database_name}之后有一个额外的}。这会导致过早关闭过程主体,而if命令的主体将成为proc的一个意外的额外参数(最后一个结束大括号变成无效命令)。
这可以称为解析时错误。如果一个错误一直持续到执行(一个运行时错误),Tcl通常对这种情况有足够的了解,从而产生更好的错误消息。
不过,此时Tcl解释器所知道的就是它正在尝试执行一个带有三个参数的命令,并且给出了四个参数。因此,错误信息非常模糊。
但是,当出现“错误# args”错误时,通常会在不应该出现的地方插入空格,或者大括号不匹配。在后一种情况下,大括号匹配编辑器非常有用。
https://stackoverflow.com/questions/45630655
复制相似问题