首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误# args:应该是"proc name args body"]

错误# args:应该是"proc name args body"]
EN

Stack Overflow用户
提问于 2017-08-11 08:41:31
回答 1查看 4.6K关注 0票数 0

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

文件‘茄子’中的Tcl错误: 错误# args:应该是"proc name args body“ 执行时 "proc logit {nick主机句柄通道文本}{

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

代码语言:javascript
复制
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
  }
}

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 09:00:19

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

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

不过,此时Tcl解释器所知道的就是它正在尝试执行一个带有三个参数的命令,并且给出了四个参数。因此,错误信息非常模糊。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45630655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档