MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

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

  • To: mathgroup at
  • Subject: [mg104546] Set::setps error? Twitter.m's OOP-like approach?
  • From: Erik Max Francis <max at>
  • 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:

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.)


Erik Max Francis && max at &&
  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

  • Prev by Date: Characteristic Function of Pareto distribution
  • Next by Date: Prufer Code/ LabeledTreeToCode Bug?
  • Previous by thread: Re: Characteristic Function of Pareto distribution
  • Next by thread: Re: Set::setps error? Twitter.m's OOP-like approach?