Performance 为什么在Lua中,error()比assert()工作得更快?

Performance 为什么在Lua中,error()比assert()工作得更快?,performance,lua,assert,Performance,Lua,Assert,条件断言是以策略方式设计应用程序的众所周知的方法。您可以完全确定,您的代码在发布后的第二天能够正常工作,但也可以确定团队中的其他开发人员何时会更改此代码 在Lua代码中放置断言有两种常见方法: assert(1 > 0, "Assert that math works") 如果为1,则为0 错误('错误') 结束 结束 结束 本地t=os.clock() pcall(带_断言) 打印(os.clock()-t) t=操作系统时钟() pcall(带_错误) 打印(os.clock()-t

条件断言是以策略方式设计应用程序的众所周知的方法。您可以完全确定,您的代码在发布后的第二天能够正常工作,但也可以确定团队中的其他开发人员何时会更改此代码

在Lua代码中放置断言有两种常见方法:

assert(1 > 0, "Assert that math works")
如果为1,则为0
错误('错误')
结束
结束
结束
本地t=os.clock()
pcall(带_断言)
打印(os.clock()-t)
t=操作系统时钟()
pcall(带_错误)
打印(os.clock()-t)
>>3.19999999E-05

>>1.5e-05


为什么会发生这种情况?

查看的源代码,并:
assert
执行一些操作,然后调用
error

但是代码中的循环没有任何作用:在第一次迭代期间抛出错误意味着其余的迭代不会运行。也许您想在PCall周围设置循环,如下所示。那么你会发现时代之间几乎没有什么不同

function with_assert()
    assert(1 < 0, 'Assert')
end

function with_error()
    if 1 > 0 then
        error('Error')
    end
end

function test(f)
    local t = os.clock()
        for i=1,100000 do 
            pcall(f)
        end
    print(os.clock() - t)
end

test(with_assert)
test(with_error)
带有_assert()的函数 断言(1<0,'assert') 结束 带有_错误()的函数 如果1>0,则 错误('错误') 结束 结束 功能测试(f) 本地t=os.clock() 对于i=1100000,请执行以下操作: pcall(f) 结束 打印(os.clock()-t) 结束 测试(使用_断言) 测试(有错误)
查看和的源代码:
assert
执行一些操作,然后调用
error

但是代码中的循环没有任何作用:在第一次迭代期间抛出错误意味着其余的迭代不会运行。也许您想在PCall周围设置循环,如下所示。那么你会发现时代之间几乎没有什么不同

function with_assert()
    assert(1 < 0, 'Assert')
end

function with_error()
    if 1 > 0 then
        error('Error')
    end
end

function test(f)
    local t = os.clock()
        for i=1,100000 do 
            pcall(f)
        end
    print(os.clock() - t)
end

test(with_assert)
test(with_error)
带有_assert()的函数 断言(1<0,'assert') 结束 带有_错误()的函数 如果1>0,则 错误('错误') 结束 结束 功能测试(f) 本地t=os.clock() 对于i=1100000,请执行以下操作: pcall(f) 结束 打印(os.clock()-t) 结束 测试(使用_断言) 测试(有错误)
function with_assert()
    assert(1 < 0, 'Assert')
end

function with_error()
    if 1 > 0 then
        error('Error')
    end
end

function test(f)
    local t = os.clock()
        for i=1,100000 do 
            pcall(f)
        end
    print(os.clock() - t)
end

test(with_assert)
test(with_error)