|
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 ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/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 > > ______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel |
|
There is also an item in the NEWS file:
Field assignments in reference classes are now consistent with slots in S4 classes: the assigned value must come from the declared class (if any) for the field or from a subclass. On 8/5/11 7:24 AM, Simon Urbanek wrote: > 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 >> >> ______________________________________________ >> [hidden email] mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> > ______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel |
|
OK, apologies - on both fronts I obviously searched on the wrong
terms. Sorry to waste your time. Jon On 5 August 2011 18:22, John Chambers <[hidden email]> wrote: > There is also an item in the NEWS file: > > Field assignments in reference classes are now consistent with slots in > S4 classes: the assigned value must come from the declared class (if any) > for the field or from a subclass. > > On 8/5/11 7:24 AM, Simon Urbanek wrote: >> >> 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 >>> >>> ______________________________________________ >>> [hidden email] mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> >>> >> ______________________________________________ >> [hidden email] mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > > ______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel |
| Powered by Nabble | Edit this page |
