you can omit the list and do the following:

open.account.2 <- function(total) {
     deposit <- function(amount) {
          if(amount <= 0)
            stop("Deposits must be positive!\n")
          total <<- total + amount
          cat(amount, "deposited.  Your balance is", this$balance(),"\n\n")
        }
     withdraw <- function(amount) {
          if(amount > total)
            stop("You don't have that much money!\n")
          total <<- total - amount
          cat(amount, "withdrawn.  Your balance is", this$balance(),"\n\n")
        }
    balance <- function() {
          cat("Your balance is", this$total, "\n\n")
        }
    this <- environment()
    }


But notice that the function balance returns nothing (because of the cat)
and balance message will be printed (cat'ed) doubly - this is easy to fix.
(but you don't really need "this" in this case as you can use "balance"
instead of "this$balance")

The last row does two things: invisibly returns the environment (necessary
for things like x$balance()) and assigns it to "this"

Regards,

Kenn

On Sun, Mar 20, 2011 at 3:45 AM, Russ Abbott <russ.abb...@gmail.com> wrote:

> Thanks for all the suggestions. I realize that this isn't the most
> important
> thing in the world -- and as a newcomer to R I gather it's not the way most
> people use R anyway.
>
> But I tried to do what looked like the simplest suggestion.
>
> open.account.2 <- function(total) {
>       this <- environment()
>        list(
>         deposit = function(amount) {
>           if(amount <= 0)
>             stop("Deposits must be positive!\n")
>           total <<- total + amount
>            cat(amount, "deposited.  Your balance is", this$balance(),
> "\n\n")
>         },
>         withdraw = function(amount) {
>           if(amount > total)
>             stop("You don't have that much money!\n")
>           total <<- total - amount
>            cat(amount, "withdrawn.  Your balance is", this$balance(),
> "\n\n")
>         },
>         balance = function() {
>           cat("Your balance is", this$total, "\n\n")
>         }
>       )
>     }
>
> When I ran it, this is what happened.
>
> > x <- open.account.2(100)
> > x$balance()
>
> Your balance is 100
>
> OK so far. But
>
> > x$deposit(50)
> Error in cat(amount, "deposited.  Your balance is", this$balance(), "\n\n")
> :
>  attempt to apply non-function
>
>
> Am I doing this the wrong way?
>
> Thanks for your interest.
>
> *-- Russ *
>
>
>
> On Sat, Mar 19, 2011 at 6:33 PM, Bert Gunter <gunter.ber...@gene.com>
> wrote:
>
> > See also the proto package, I believe.
> >
> > -- Bert
> >
> > On Sat, Mar 19, 2011 at 5:51 PM, Janko Thyson
> > <janko.thyson.rst...@googlemail.com> wrote:
> > > You might want to check out Reference Classes (?SetRefClass). The
> object
> > > itself is stored in '.self' and can be referenced that way.
> > >
> > > HTH,
> > > Janko
> > >
> > > -----Ursprüngliche Nachricht-----
> > > Von: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org
> ]
> > Im
> > > Auftrag von Russ Abbott
> > > Gesendet: Samstag, 19. März 2011 23:35
> > > An: r-help@r-project.org
> > > Betreff: [R] Referring to objects themselves
> > >
> > > Is it possible to refer to an object from within a method, as in *this
> > *in
> > > Java?  I can't find anything about this in the documentation.  Sorry if
> I
> > > missed it.
> > >
> > > Thanks.
> > >
> > > *-- Russ Abbott*
> > > *_____________________________________________*
> > > ***  Professor, Computer Science*
> > > *  California State University, Los Angeles*
> > >
> > > *  Google voice: 747-*999-5105
> > > *  blog: *http://russabbott.blogspot.com/
> > >  vita:  http://sites.google.com/site/russabbott/
> > > *_____________________________________________*
> > >
> > >        [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help@r-project.org mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> > >
> > > ______________________________________________
> > > R-help@r-project.org mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> > >
> >
> >
> >
> > --
> > Bert Gunter
> > Genentech Nonclinical Biostatistics
> >
>
>         [[alternative HTML version deleted]]
>
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to