Operator overloading for non-value objects
brendan at mozilla.com
Tue Jan 14 12:49:44 PST 2014
Kevin Smith wrote:
> `0m` is literal syntax, for `decimal(0)`. Where `decimal` is a
> value type factory.
> Right - I meant what are the semantics of "===" applied to dissimilar,
> perhaps "numeric", value types.
We worked through this in 2008 when IBM was pushing decimal at ES3.1
(now ES5). We do not want 0m === 0 for many reasons, including the relation
typeof x == typeof y && x == y <=> x === y
We also didn't want problems of cohorts differing by significance (1.0m
vs. 1m, if you can believe it) being equated to 1 (the number).
This is one of the reasons I've designed value objects (so far) to allow
typeof customization. (The other is because typeof is *useful* in
numeric contexts, and making all non-number numerics have typeof-type
"object" is useless, a disservice to users.)
There is nothing wrong in my view with well-written == usage. I'm not
Crock. I don't say always use ===. While opinions vary, the fact remains
that == and <= are in the language, are loose, and need to be
overloadable for useful value objects, specifically more numeric types.
Suggest you pull == out of your mental penalty box and look at it again.
It's not a recidivist.
More information about the es-discuss