[R] R5: Lock a class field from within a method?

Johannes Graumann johannes_graumann at web.de
Thu Oct 25 22:17:38 CEST 2012


David Winsemius wrote:

> 
> On Oct 24, 2012, at 2:14 AM, Johannes Graumann wrote:
> 
>> Hello,
>>
>> testclass <- setRefClass(
>>  "testclass",
>>  fields = list(testfield = "logical"),
>>  methods = list(validate=function(){testfield<<-TRUE}))
>>
>>> test <- testclass$new()
>>> test$testfield
>> logical(0)
>>> test$validate()
>>> test$testfield
>> [1] TRUE
>>
>> Works just fine for me.
>>
>> I would love to be able to do something like
>>
>> testclass <- setRefClass(
>>  "testclass",
>>  fields = list(testfield = "logical"),
>>  methods = list(validate=function(){
>> testfield<<-TRUE
>> .self$lock(testfield)
>>  }))
>>
>> but am unabel to achieve that. Can anyone point out how to go about
>> rendering a field immutable after execution of a specific method?
>>
> 
> The fact that you used only "lock" in your code and I am unable to
> find such a function makes me wonder whether that was an implicit
> psuedo-code effort and that you do not know about:
> 
> ?lockBinding

lockbinding does in fact what I want, but your statement about pseudo-code 
is not entirely correct ... try the following ("?setRefClass" will light the 
way).

> testclass <- setRefClass(
   "testclass",
   fields = list(testfield = "logical"))
> testclass$lock("testfield")
> test <- testclass$new()
> test$testfield <- TRUE
> test$testfield <- FALSE

I was assuming to be able to have access to the "lock" method from a class 
instance as well (rather than just in the class definition) ... Is that 
indeed impossible?

Cheers, Joh




More information about the R-help mailing list