[ESS] ess-developer mode and reference classes

Laurent Gatto laurent.gatto at gmail.com
Wed May 29 18:35:45 CEST 2013


Forgot to specify ess-version 13.05 [rev. 5574 (2013-05-14)] and GNU
Emacs 24.1.1.

Laurent

On 29 May 2013 17:33, Laurent Gatto <laurent.gatto at gmail.com> wrote:
> 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