On Sat, Mar 19, 2011 at 9:45 PM, 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. >
balance is a component of the list. Its not directly a component of this. If you name the list you can refer to it as this$methods$balance open.account.2 <- function(total) { this <- environment() methods <- list(...whatever...) } -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com ______________________________________________ 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.