lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 09/19/2014 04:39 PM, Andrew Starks wrote:
Hisham / Jorge:

How do you deal with the following:

1: You parse the input that you receive and you know it to be well-formed.
2: You call a library function that will look for a resource by that
name and, if it fails, returns `nil, error`.
3: That same call may also generate an error. For example, perhaps the
object contains a dependent resource that is in an invalid state.

First, as I said, I don't expect to library to crash me. Then I accept the library might be unable to return anything back, for _any_ reason. This means there's a "if ret then" or equivalent somewhere. Alternatively, if this result is absolutely critical for me continuing doing stuff, I might wrap the call in an assert. I could also do that while developping, to reduce the number of cases I have to handle.

If there's no assert, and I got no result, then I might ask what happened. In your example, I would expect to find in the docs the "resource does not exist" error, and perhaps a bunch of other weird error conditions. Probably all bundled in a "unknown error" :)

In other words, I either have a result, or not, and then all the reasons why not are in one single place.

So my app would be something like:

local ret, err = lib.call('resource_name')
if ret then
	--dostuff with ret
else --as long as I care
 	if err == "does not exist" then
		--think hard what to do and why i'm here
	else
		error(err)
	end
end

It's a bit like the socket API and the EAGAIN, which is barely an error at all, and all the other errors: they are very different conceptually, all they share is that there's no data returned, but are all handled in the same manner.


Jorge