[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: __type metafield (was: Re: Lua 5.3 work1 Considering math.isinteger or type())
- From: Philipp Janda <siffiejoe@...>
- Date: Tue, 23 Jul 2013 02:32:05 +0200
Am 22.07.2013 13:58 schröbte John Hind:
This could also be usefully extended by a new '__type' metatable key. If
present, its value would be returned as the second return from type(). So
classes/types created from table or userdata type could easily be set up to
return an appropriate sub-type.
If you have type-inheritance and/or duck-typing, knowing the exact type
isn't all that useful. I very much like Dirk Laurie's `has()`
approach[1] (although I would choose a different implementation). One
situation where having `__type` is nice is C code directly accessing a
userdata's memory (-> `luaL_checkudata`). I currently have my own
implementation of checkudata which uses the `__type` field to create
error messages like
bad argument #2 to '__add' (apr_oflags_t expected, got apr_fileattrs_t)
instead of
bad argument #2 to '__add' (apr_oflags_t expected, got userdata)
This change would also be backwards compatible (unless someone parses
those error messages). An alternative implementation could have
`luaL_newmetatable` store a reverse mapping from metatable to type name
for `luaL_checkudata` to use in error messages ...
[1]: http://permalink.gmane.org/gmane.comp.lang.lua.general/99873
Philipp