[ESS] ess-developer mode and reference classes
Laurent Gatto
laurent.gatto at gmail.com
Wed May 29 18:33:43 CEST 2013
Dear all,
I have a reference class defined like this
.Synapter <-
setRefClass("Synapter",
fields = list(
Version = "character",
SynapterLog = "character",
...
methods = list(
initialize = function() {
...
},
## and many more
))
Using ess-developer mode, C-c C-p on that paragraph evals in the
appropriate package environment, and all is fine.
It happens however that more methods are defined later in the file
## more methods
.Synapter$methods(
list(
moremethod1 = function() {
...
},
## many methods
moremethodN = function() {
...
}))
If I now C-c C-p these new methods or C-c C-l the complete file I
obtain the following error
Error in eval({ :
error in evaluating the argument 'expr' in selecting a method for
function 'eval': Error in .Synapter$methods(list(searchGrid =
function(ppms, nsds, subset, (from synapter-class.R#308) :
the definition of class “Synapter” in package ‘synapter’ is locked,
methods may not be redefined
where 308 is the exact line where the second set of methods are
defined. Note that I do not explicitly lock any fields.
(If of interest, the complete code is available on
https://github.com/lgatto/synapter/blob/master/R/synapter-class.R)
Reading through ?setRefClass, I found the following for $methods(...),
that suggests the above might not be totally unexpected:
"In particular, methods can not be redefined in a class in an attached
package with a namespace: The class method checks for a locked binding
of the class definition."
Hoping I have not missed anything obvious, is there a way to get
around this in ess-developer mode?
Thank you in advance.
Best wishes,
Laurent
--
[ Laurent Gatto | slashhome.be ]
More information about the ESS-help
mailing list