[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: best way to add field to userdata?
 
- From: Ted Unangst <ted.unangst@...>
 
- Date: Thu, 22 Apr 2010 03:27:38 -0400
 
This seems obvious, but I can't find the right info.  I have a C
module that exports a 'class' to Lua that has some methods and fields.
 (It's an image library, for context).
The first thing I did was newmetatable, pushvalue, setfield(-2,
"__index"), register(L, NULL, methods).  Basically, by the book.  That
worked great for the methods:
img = GetImage()
img:resize(x, y)
img:makepretty() -- whatever
But in order to get access to the width and height, I needed to use
getters ("img:width()", as a call) which are annoying.  I want
"img.width" to work.
Currently, I instead wrote my own index method, set that in __index,
and basically emulate register's behavior by iterating over my method
array by hand.  Then, if no function matches, I fall back on a series
of if-else strcmp tests for known field names.  This seems hackish.
Alternatively, I could return a table and hang my userdata off that,
but it seems prone to accidents.
Am I missing something obvious in the documentation?  Everything I've
found only talks about adding methods.