Set::setps error? Twitter.m's OOP-like approach?

*To*: mathgroup at smc.vnet.net*Subject*: [mg104546] Set::setps error? Twitter.m's OOP-like approach?*From*: Erik Max Francis <max at alcyone.com>*Date*: Tue, 3 Nov 2009 02:57:24 -0500 (EST)

I was experimenting with vaguely OOP-like wrappers around data similar to how Twitter.m does things: http://blog.wolfram.com/2009/04/30/twittering-with-mathematica/ I was experimenting with "mutable objects" and I'm running into a scoping problem of some type that I don't understand. Here's some sample code creating a wrapper around an "account balance": In[1]:= {NAME, BALANCE} = Range[2] Out[1]= {1, 2} In[2]:= create[name_, balance_] := Account[name, balance] In[3]:= getName[account_Account] := account[[NAME]] In[4]:= getBalance[account_Account] := account[[BALANCE]] In[5]:= deposit[account_Account, amount_] := account[[BALANCE]] += amount The deposit function doesn't work, though: In[6]:= a = create["test", 100] Out[6]= Account["test", 100] In[7]:= getBalance[a] Out[7]= 100 In[8]:= deposit[a, 25] During evaluation of In[8]:= Set::setps: Account[test,100] in the part assignment is not a symbol. >> Out[8]= 125 In[9]:= getBalance[a] Out[9]= 100 But here's what I'm confused; if I do what getBalance does manually, it works fine: In[10]:= a[[BALANCE]] += 25 Out[10]= 125 In[11]:= a Out[11]= Account["test", 125] The Set::setps error is about Blocks so I suppose I'm running into some scoping issue but I don't follow what it is. What am I missing here? What's the right way to write getBalance? Do Mathematica users find Twitter.m's approach to wrapping around objects palatable in the first place? (My eventual application is for a wrapper around tensor objects where multiple things have to be carted around and the normal display of such objects would be far too ungainly to be acceptable anyway.) Thanks. -- Erik Max Francis && max at alcyone.com && http://www.alcyone.com/max/ San Jose, CA, USA && 37 18 N 121 57 W && AIM/Y!M/Skype erikmaxfrancis Wyrd has swept all my kin / all the brave chiefs away! / Now I must follow them! -- Beowulf

**Follow-Ups**:**Re: Set::setps error? Twitter.m's OOP-like approach?***From:*Daniel Lichtblau <danl@wolfram.com>