为什么error()比Lua中的assert()更快?

问题描述 投票:1回答:1

条件的确定是战略方法设计应用程序的众所周知的方法。您可以完全确定自己的代码在发布后的第二天就能正常工作,而且可以确保团队中的其他开发人员可以更改此代码。

有两种将断言放入Lua代码中的常用方法:

assert(1 > 0, "Assert that math works")
if 1 <= 0 then
    error("Assert that math doesn't work")
end

从性能的角度来看,我希望这件事类似。仅考虑样式。但这恰恰是不正确的。

断言在我的机器上工作时间更长:

function with_assert()
    for i=1,100000 do 
        assert(1 < 0, 'Assert')
    end
end

function with_error()
    for i=1,100000 do 
        if 1 > 0 then
            error('Error')
        end
    end
end

local t = os.clock()
pcall(with_assert)
print(os.clock() - t)

t = os.clock()
pcall(with_error)
print(os.clock() - t)

>> 3.1999999999999e-05

>> 1.5e-05

为什么会发生?

performance lua assert
1个回答
0
投票

查看asserterror的源代码:assert做一些工作,然后调用error

© www.soinside.com 2019 - 2024. All rights reserved.