You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动