Zhichu Chen wrote: > Hi, > > I'm learning to use luatex these days, one day actually. It's very > interesting. Although reference manuals are available, I still don't > know how to implement my designation. > > The thing is, I know there's a "self" variable for object-oriented > programming, like > ================================================================== > \startluacode > testdata = { a = 0, > b = 0, > c = 0, > plus = function (self) > self.c = self.a + self.b > end > } > mytest = testdata > mytest.a=10 > mytest.b=100 > mytest:plus() > tex.print(mytest.c) > \stopluacode > ================================================================== > OK, but what if I wanna do something more, like substract? I would > like to use another object, like > ================================================================== > \startluacode > testdata = { a = 0, > b = 0, > c = 0, > calc = Calc > } > Calc = { plus = function (self) > self.c = self.a + self.b > end, > substract = function (self) > self.c = self.a - self.b > end > } > mytest = testdata > mytest.a=10 > mytest.b=100 > mytest.calc:plus() > tex.print(mytest.c) > \stopluacode > ================================================================== > Of course this won't work, for the "self" in Calc refers to mytest.calc > rather than mytest. How to implement things like that?
Calc = { add = function (self) self.c = self.a + self.b end, substract = function (self) self.c = self.a - self.b end } testdata = { a = 0, b = 0, c = 0, calc = function(self,f) return Calc[f](self) end } mytest = testdata mytest.a=10 mytest.b=100 Calc.add(testdata) print(mytest.c) testdata:calc("substract") print(mytest.c) but it might make more sense to look into metatables (i assume that you own the programming in lua book which explains that) Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : https://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________