MathGroup Archive 2009

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

Search the Archive

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


  • 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?