[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: How to change class member data reference?
- From: Thijs Schreijer <thijs@...>
- Date: Sun, 14 Sep 2014 12:04:08 +0000
> -----Original Message-----
> From: lua-l-bounces@lists.lua.org [mailto:lua-l-bounces@lists.lua.org] On
> Behalf Of albert_200200
> Sent: vrijdag 12 september 2014 3:49
> To: Lua mailing list
> Subject: Re: How to change class member data reference?
>
> On 2014/9/11 16:34, Thijs Schreijer wrote:
> > You're mixing 2 things I think....
> >
> >> -----Original Message-----
> >> From: lua-l-bounces@lists.lua.org [mailto:lua-l-bounces@lists.lua.org] On
> >> Behalf Of albert_200200
> >> Sent: donderdag 11 september 2014 10:09
> >> To: lua-l
> >> Subject: How to change class member data reference?
> >>
> >> First I use the following code to define a lua class:
> >> clsSMSSend = {}
> >> function clsSMSSend:new()
> >> local o = {}
> >> setmetatable(o, self)
> >> self.__index = self
> >> o.MobileNo = "oldmobile"
> >> o.tbl_body = {
> >> [1] = o.MobileNo,
> >> }
> > You put in in a sub-table, which indicates you're intending to use it as a
> proxy table. But in that case you need to add __newindex and __index methods
> that handle retrieval and storage of those elements
> >
> >> return o
> >> end
> >>
> >> The problem is as below:
> >> obj = clsSMSSend:new()
> >> obj.MobileNo = "newmobile"
> >> for k, v in ipairs(obj.tbl_body) do
> > Now you're looking in obj.tbl_body where you put the value in
> obj.MobileNo, not in obj.tbl_body.MobileNo. If you use the proxy approach,
> then set an __index method that looks key up inside tbl_body.
> >
> > Hth
> > Thijs
> >
> >
> >> print(k, v) --but here still print "oldmobile" not "newmobile"
> >> end
> >>
> >> If I want the code to print "newmobile", how can I correct it? Thanks.
> >>
> >
> Thanks for your reply, Pardon me for my foolish, I didn't get your idea,
> could you write some tip code? Thanks.
>
If you set
> obj.MobileNo = "newmobile"
Then why would you expect
> for k, v in ipairs(obj.tbl_body) do
> print(k, v)
> end
To print "newmobile" instead of "oldmobile"?