Performance 为什么在Lua中,error()比assert()工作得更快?
条件断言是以策略方式设计应用程序的众所周知的方法。您可以完全确定,您的代码在发布后的第二天能够正常工作,但也可以确定团队中的其他开发人员何时会更改此代码 在Lua代码中放置断言有两种常见方法: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
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)