[REBOL] Re: Version incompatibilities
From: gabriele:colellachiara at: 27-Nov-2005 12:48
Hi Sunanda,
On Sunday, November 27, 2005, 11:59:41 AM, you wrote:
Sac> But there are incompatibilities in versions of Core that need to be fixed
Sac> first. A biggie is:
Sac> my-object: make object! [field1: 1]
Sac> if error? try[get in my-object 'field2] [
Sac> print "field2 does not exist"
Sac> ]
May I say, that coding style sometimes matters a lot.
Even back then when GET did not accept NONE, I would have coded
that as:
either in my-object 'field2 [
my-object/field2
] [
print "field2 does not exist"
]
Throwing errors is always going to be more expensive, so I really
tend to avoid doing that when I just want to do a check. (Of
course, if you just wanted to delay the check, that's a different
issue; but it's not the case above.)
Anyway, a possible solution to your problem is:
>> get none
== none
>> remove back tail third third :get
== []
>> get none
** Script Error: get expected word argument of type: any-word object
** Near: get none
which will give you back that error.
Sac> my-object: make object! [field1: 1] ;; no field2
Sac> my-object: make object! [field1: 1; field2: none] ;; field2 is none
Sac> my-object: make object! [field1: 1; field2: 2] ;; field2 is another value
Note that if you checked the result of IN instead, you'd have no
problems with any of those cases.
Sac> Then, once we've identified the code that is affected by the change, we
Sac> either:
Sac> ** recode it to work correctly in all three conditions
Sac> **continue to use the older Core for that script (if that is possible: the
Sac> Library is highly modular, so two scripts calling each other may need different
Sac> versions of Core)
** patch the current Core so that it behaves like the old one. ;)
(In the few cases when you're not going to be able to do it,
you'll have to fix the scripts.)
Regards,
Gabriele.
--
Gabriele Santilli <gabriele-rebol.com> --- http://www.rebol.com/
Colella Chiara software division --- http://www.colellachiara.com/