Hello, an S4 class "Foo" is defined with a setter, $. For several reasons, the 
setter calls a function, .foo.update(). However, bypassing the argument names 
of the setter does not work. Question 1: Why not and how can I fix this? 
Question 2: What is the way to define either the function or the setter to 
modify the original object (not returning the modified copy of it an overwrite 
the original by assignment)? Thanks, Sören

setClass("Foo",
  representation(
    N = "numeric"
  ),
  prototype(
    N = 10000
  )
)

.foo.update <- function(object, ...) {
  args <- list(...)
  for (i in slotNames("Foo")[pmatch(names(args), slotNames("Foo"), nomatch=0)]) 
{
    slot(object, i) <- args[[i]]
    # indeed more to do here
    return(object)
  }
}

setReplaceMethod("$", "Foo",
  function(x, name, value) {
    x <- .foo.update(x, name=value)
    x
  }
)

x <- new("Foo")
x
x$N <- 99
x # NULL????

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to