我在互联网上找到了这个脚本。它有点老了,开发者页面早已不复存在。代码有效,但我正在尝试清理它。例如:如果周= 0,则不显示它。我从控制台收到有关额外令牌的错误。我试图谷歌这个错误,但没有什么可靠的。寻找一些见解。
评论部分是我试图“清理它”。这是我收到的错误。
Tcl错误[正常运行时间]:表达式“$ :: time(week)= 0”中的语法错误:表达式结束时的额外标记
在评论部分,它工作正常。只是想清理一下所以它不会返回“我已经在线0周0天0小时1分钟”。
bind pub "-|-" !uptime uptime
proc uptime { nick host handle channel text } {
putquick "PRIVMSG $channel :I have been online for [eggtime]."
}
proc eggtime {} {
set ::time(uptime) [expr [clock seconds]-$::uptime]
set ::time(week) [expr $::time(uptime)/604800]
set ::time(uptime) [expr $::time(uptime)-$::time(week)*604800]
set ::time(days) [expr $::time(uptime)/86400]
set ::time(uptime) [expr $::time(uptime)-$::time(days)*86400]
set ::time(hour) [expr $::time(uptime)/3600]
set ::time(uptime) [expr $::time(uptime)-$::time(hour)*3600]
set ::time(mins) [expr $::time(uptime)/60]
set ::time(uptime) [expr $::time(uptime)-$::time(mins)*60]
set ::time(secs) $::time(uptime)
#if {$::time(week) = 0} {
# set ::time(return) "$::time(days) day\(s\), $::time(hour) hour\(s\), $::time(mins) minute\(s\) and $::time(secs) second\(s\)"
#} else if {$::time(days) = 0} {
# set ::time(return) "$::time(hour) hour\(s\), $::time(mins) minute\(s\) and $::time(secs) second\(s\)"
#} {
# set ::time(return) "$::time(week) week\(s\), $::time(days) day\(s\), $::time(hour) hour\(s\), $::time(mins) minute\(s\) and $::time(secs) second\(s\)"
#}
set ::time(return) "$::time(week) week\(s\), $::time(days) day\(s\), $::time(hour) hour\(s\), $::time(mins) minute\(s\) and $::time(secs) second\(s\)"
return $::time(return)
}
答案 0 :(得分:3)
等于运算符是==。
您在评论区块的最后一部分中遗漏了else
。您还应该使用elseif
而不是else if
。这不是C.
但是,这是我之前写的一个,它占用了一个已用的间隔并返回一个英文字符串。它大致是你的目标。
# paste::delta --
#
# Returns the time difference between the given and current time
# as an english string.
#
proc ::paste::delta {time} {
set r $time
catch {
set delta [expr {[clock seconds] - $time}]
if {$delta < 60} {
set r "$delta secs ago"
} elseif {$delta < 3600} {
set r "[expr {$delta / 60}] mins ago"
} elseif {$delta < 86400} {
set r "[expr {$delta / 3600}] hours ago"
} else {
set r "[expr {$delta / 86400}] days ago"
}
}
return $r
}
所以你得到的东西是[paste :: delta 7260]给出“2小时前”或310给出“5分钟前”。
另一件事 - 使用expr
语句,总是使用花括号括起表达式的主体。否则,解析器必须再次解析主体,并且它可能具有显着的性能成本。