Janko Thyson
2010-Nov-17 12:07 UTC
[Rd] Reference classes: accessor functions via 'getRefClass(...)$accessors(...)'
Hi there, I''d like to choose between an "static" and "dynamic" access of a reference class field, say ''a''. myObj <- getRefClass("Blabla")$new() Static: myObj$a Dynamic: myObj$a.get() where the function retrieves the data from a database (or some other location), stores it to a buffer and optionally updates the static field value ''a''. I''ve set up such a method ''a.get()'' where I can actually decide between static and dynamic runmode (so the method also wraps the call ''myObj$a'' for the static runmode). Now I saw that setting up such accessor methods (get/set) is already done for me if I use ''getRefClass("Blabla")$accessors(.)''. I just don''t understand what exactly I have to do there, because this results in an error: ''getRefClass("Blabla")$accessors("a")'' Can anyone point me to the correct use of ''getRefClass(.)$accessors(.)''? Thanks a lot, Janko [[alternative HTML version deleted]]
Romain Francois
2010-Nov-17 12:19 UTC
[Rd] Reference classes: accessor functions via 'getRefClass(...)$accessors(...)'
Le 17/11/10 13:07, Janko Thyson a ?crit :> > Hi there, > > > > I'd like to choose between an "static" and "dynamic" access of a reference > class field, say 'a'. > > > > myObj<- getRefClass("Blabla")$new() > > > > Static: myObj$a > > Dynamic: myObj$a.get() where the function retrieves the data > from a database (or some other location), stores it to a buffer and > optionally updates the static field value 'a'. > > > > I've set up such a method 'a.get()' where I can actually decide between > static and dynamic runmode (so the method also wraps the call 'myObj$a' for > the static runmode). > > > > Now I saw that setting up such accessor methods (get/set) is already done > for me if I use 'getRefClass("Blabla")$accessors(.)'. I just don't > understand what exactly I have to do there, because this results in an > error: 'getRefClass("Blabla")$accessors("a")' > > > > Can anyone point me to the correct use of 'getRefClass(.)$accessors(.)'? > > > > Thanks a lot, > > JankoHi, fields can either be data or active binding functionss. See ?makeActiveBinding for some example of active binding functions in their original context. Here is an example of a reference class that keeps its data in a file. require( methods ) Foo <- setRefClass( "Foo", fields = list( file = "character", x = function(value){ if( missing( value ) ){ read.table( file ) } else{ write.table( value, file = file ) } } ) ) foo <- Foo$new( file="/tmp/iris.txt" ) foo$x <- iris foo$x write.table( subset( iris, Petal.Length < 2), file = "/tmp/iris.txt" ) foo$x Does that help ? Romain -- Romain Francois Professional R Enthusiast +33(0) 6 28 91 30 30 http://romainfrancois.blog.free.fr |- http://bit.ly/9VOd3l : ZAT! 2010 |- http://bit.ly/c6DzuX : Impressionnism with R `- http://bit.ly/czHPM7 : Rcpp Google tech talk on youtube
Vitalie S.
2010-Nov-17 12:50 UTC
[Rd] Reference classes: accessor functions via 'getRefClass(...)$accessors(...)'
"Janko Thyson" <janko.thyson at ku-eichstaett.de> writes:> Hi there, > > I'd like to choose between an "static" and "dynamic" access of a reference > class field, say 'a'. > > myObj <- getRefClass("Blabla")$new() > > Static: myObj$a > > Dynamic: myObj$a.get() where the function retrieves the data > from a database (or some other location), stores it to a buffer and > optionally updates the static field value 'a'. > > I've set up such a method 'a.get()' where I can actually decide between > static and dynamic runmode (so the method also wraps the call 'myObj$a' for > the static runmode). > > Now I saw that setting up such accessor methods (get/set) is already done > for me if I use 'getRefClass("Blabla")$accessors(.)'. I just don't > understand what exactly I have to do there, because this results in an > error: 'getRefClass("Blabla")$accessors("a")' > > Can anyone point me to the correct use of 'getRefClass(.)$accessors(.)'?It works for me: X <- setRefClass("XXX", fields = list(a = "character")) X$accessors("a") X # ... # Class Methods: # "callSuper", "export", "getA", "import", "initFields", "setA" # ... accessors() convenience method creates setA and getA functions: x <- X$new() x$getA #Class method definition for method getA() #function () #a #<environment: 02a198c0> HTH, Vitalie.> > > Thanks a lot, > > Janko > > [[alternative HTML version deleted]]
Possibly Parallel Threads
- Reference Classes: removing methods -> implications for objects/instances of that class
- WG: Reference classes: error with missing arguments in method calls
- How can I write methods for 'as()'?
- Ref Classes: bug with using '.self' within initialize methods?
- Reference Classes: shortcut like 'isS4' for Ref Classes?