[squeakdev] a transitive law broken by Fraction since 5.3
Marcel Taeumel
marcel.taeumel at hpi.de
Fri Dec 31 13:30:39 UTC 2021
Hi Chris 
> Fraction numerator: 5 denominator: 1.
I think that the issue is that this line does not answer an Integer but a Fraction. Numbers are special in the objectoriented world in that they can change their class without notice. :)
This works:
 a b c 
a := 5/1.
b := 5.0.
c := 5.
self assert: a=b; assert: b=c. "Pass"
self assert: a=c. "Fail"
Best,
Marcel
Am 31.12.2021 01:30:25 schrieb Chris Muller <ma.chris.m at gmail.com>:
__________
“If a is equal to b and b is equal to c, then a is equal to c.”
__________
 a b c 
a := Fraction numerator: 5 denominator: 1.
b := 5.0.
c := 5.
self assert: a=b; assert: b=c. "Pass"
self assert: a=c. "Fail"
__________
I understand this is not a normal way to create Fractions, but serializers must often construct objects in otherthannormal ways. This constructor on Fraction is actually a valid API, but leaves an inconsistent comparison contract with other Numbers.
I fixed it by reverting Fraction>>#= to the (nice 3/28/2006 23:41) edition.
Comments?
 next part 
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeakdev/attachments/20211231/c148e1e0/attachment.html>
More information about the Squeakdev
mailing list
