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
___________________________________________________________________________________

Reply via email to