On 22 October 2010 18:55, John Chambers <j...@r-project.org> wrote: >> As a suggestion, it would be nice if the accessors() method could be >> used to create just "getters" or just "setters" for particular fields, >> although I realise this can be worked around by removing the unwanted >> methods afterwards. > > In other words, read-only fields. There is a facility for that implemented > already, but it didn't yet make it into the documentation, and it could use > some more testing. The generator object has a $lock() method that inserts a > write-once type of method for one or more fields. Example: > >> fg <- setRefClass("foo", list(bar = "numeric", flag = "character"), > + methods = list( > + addToBar = function(incr) { > + b = bar + incr > + bar <<- b > + b > + } > + )) >> fg$lock("bar") >> ff = new("foo", bar = 1.5) >> ff$bar <- 2 > Error in function (value) : Field "bar" is read-only > > A revision will document this soon. > > (And no, the workaround is not to remove methods. To customize access to a > field, the technique is to write an accessor function for the field that, in > this case, throws an error if it gets an argument. See the documentation > for the fields argument. The convention here and the underlying mechanism > are taken from active bindings for environments.)
OK, yes - I see. This is clearly much less superficial than removing the setter method for a field which can be directly set anyway. I'll have to try out field accessor functions and get a feel for the semantics. Many thanks for the rapid and very helpful response. Regards, Jon ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel