2017-08-11 65 views
0

我已經在Eggdrop v1.6.21下運行這個腳本,但是我無法啓動它。我收到的錯誤是:Eggdrop - TCL錯誤[錯誤#參數:應該是「proc name args body」]

Tcl錯誤文件 'eggdrop.conf':

錯誤#ARGS:應該是 「PROC名ARGS體」

在執行

「PROC Logit模型{缺口主機手柄通道文本} {

這可能是什麼問題呢?這是我的腳本。

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 
    } 
} 

非常感謝。

+0

我建議*不要*關閉這個問題。雖然原因確實是一個簡單的印刷錯誤,但這是一個經常發生的錯誤,解決方案可能仍然有幫助(當然,我有偏見)。 –

回答

4

問題出在if的條件:在{database_name}之後還有一個額外的}。它導致過程的主體過早關閉,並且if命令的主體成爲proc的一個無意的額外參數(並且最後一個大括號變成無效命令)。

這可能被稱爲分析時錯誤。如果一個錯誤使得它一直執行(一個運行時錯誤),Tcl通常知道情況足以產生更好的錯誤信息。

在這一點上,雖然,所有的Tcl解釋知道的是,它試圖用三個參數來執行命令,並已授予了四種。因此,錯誤消息非常模糊。

然而,當一個「錯誤#ARGS」錯誤信號,一個人通常要麼在某個地方插入空白的地方不應該,或括號不匹配。在後一種情況下,大括號匹配編輯器非常有用。

+0

完美!這解決了它。我不能相信我忽略了這一點。 – t0rxe