On Thu, Dec 4, 2008 at 5:28 PM, Hans Hagen <[EMAIL PROTECTED]> wrote: > 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) Thanks > > but it might make more sense to look into metatables (i assume that you > own the programming in lua book which explains that) I don't have one :(, I'll take a good at it later. > > 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 > ___________________________________________________________________________________ >
-- Best Regards Chen ---------------------------------------------------------------- Zhi-chu Chen | Shanghai Synchrotron Radiation Facility No. 2019 | Jialuo Rd. | Jiading | Shanghai | P.R. China tel: 086 21 5955 3405 | zhichu.chen.googlepages.com | www.sinap.ac.cn ---------------------------------------------------------------- ___________________________________________________________________________________ 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 ___________________________________________________________________________________