Lua编写BASIC解释器SLEEP函数时遇‘函数值算术运算’错误求助
问题排查与解决方案
嘿,这个错误的原因其实很直观——你在代码里误用了os.time函数的调用方式!
错误根源
Lua 中的os.time是一个函数,要获取当前的 Unix 时间戳,必须通过os.time()(带括号调用)来执行它。而你写的:
local ct=os.time+time
以及后面的:
until(os.time>=ct)
都是直接把os.time这个函数本身当成数值来做运算/比较,Lua 当然会抛出attempt to perform arithmetic on a function value的错误啦。
修正后的代码
把涉及os.time的两处都改成调用形式就可以解决问题了:
function s(time) local time=tonumber(time) if useSleep then sleep(time) elseif useWait then wait(time) else -- 退而求其次的忙等实现 local ct = os.time() + time repeat until os.time() >= ct end end -- 测试:等待5秒 s(5)
额外小提示
这种忙等的方式会持续占用CPU资源,如果你的运行环境支持socket.sleep或者其他异步等待方式,优先用那些会更友好哦~
内容的提问来源于stack exchange,提问作者VBW




