[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Proposal: Add "level" argument to assert()
- From: Enrico Colombini <erix@...>
- Date: Sat, 09 Apr 2011 17:34:44 +0200
On 09/04/2011 16.41, HyperHacker wrote:
assert() is a convenient function for checking for error conditions in
one statement. A common expression:
if not foo then error("Invalid foo") end
can be shortened to:
assert(foo, "Invalid foo")
I like assert, but I rarely use it in Lua because of performance
consideration when I need more information. Maybe I'm mistaken (I would
gladly be) but I'm under the impression that:
local f = assert(io.open(fname, 'r'), 'cannot open: ' .. fname)
always performs the string concatenation, regardless of success or
failure, while the if..then equivalent:
local f = io.open(fname, 'r')
if not f then print('cannot open: ' .. fname) end
only concatenates in case of error. In some cases (e.g. function
argument check) this could lead to a significant difference in execution
time and memory usage.
Maybe a varargs (print-like) version of assert() could avoid this
dilemma. Or a generic:
assert(cond, func, ...)
that calls func(...) in case of assertion failure, before exiting.
--
Enrico