Jon Clayden
2011-Aug-05 10:41 UTC
[Rd] initFields() method no longer coerces arguments in R-devel
Dear all, I've just had a package update bounced from CRAN because of a recent change in R-devel which seems to affect the behaviour of the initFields() reference class method. (The change must be very recent because I tested the package on a week-old build of R-devel.) It seems that the method no longer coerces its arguments to the expected type of each field. For a simple example:> Foo <- setRefClass("Foo", fields=list(number="integer"), methods=list(initialize=function (number = NULL) initFields(number=number))) > Foo$new()Error in function (value) : invalid replacement for field ?number?, should be from class ?integer? or a subclass (was class ?NULL?) (This used to work, with "number" being set to "integer(0)"). In fact it is now extremely strict, not even allowing a double literal which is equal to an integer:> Foo$new(number=1)Error in function (value) : invalid replacement for field ?number?, should be from class ?integer? or a subclass (was class ?numeric?) I don't see anything about this in the NEWS, so I was wondering if I could get clarification on whether this is now the intended behaviour, before I further modify the package. I must say that this will be a bit of a pain to "correct"... All the best, Jon
Simon Urbanek
2011-Aug-05 14:24 UTC
[Rd] initFields() method no longer coerces arguments in R-devel
It's worth actually reading the list you post to ... http://r.789695.n4.nabble.com/Reference-classes-assignments-to-fields-td3708168.html On Aug 5, 2011, at 6:41 AM, Jon Clayden wrote:> Dear all, > > I've just had a package update bounced from CRAN because of a recent > change in R-devel which seems to affect the behaviour of the > initFields() reference class method. (The change must be very recent > because I tested the package on a week-old build of R-devel.) It seems > that the method no longer coerces its arguments to the expected type > of each field. For a simple example: > >> Foo <- setRefClass("Foo", fields=list(number="integer"), methods=list(initialize=function (number = NULL) initFields(number=number))) >> Foo$new() > Error in function (value) : > invalid replacement for field ?number?, should be from class > ?integer? or a subclass (was class ?NULL?) > > (This used to work, with "number" being set to "integer(0)"). In fact > it is now extremely strict, not even allowing a double literal which > is equal to an integer: > >> Foo$new(number=1) > Error in function (value) : > invalid replacement for field ?number?, should be from class > ?integer? or a subclass (was class ?numeric?) > > I don't see anything about this in the NEWS, so I was wondering if I > could get clarification on whether this is now the intended behaviour, > before I further modify the package. I must say that this will be a > bit of a pain to "correct"... > > All the best, > Jon > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >
Reasonably Related Threads
- General "nil" reference class object
- Ref classes initFields has incorrect environment?
- Dabbling with R5 setRefClass - Inheritance problems
- Question about copying reference objects using the initialize method
- Reference Classes: Generalizing Reference Class Generator objects?