S03 says:

        Binary === tests type and value correspondence: for two value
        types, tests whether they are the same value (eg. 1 === 1); for
        two reference types, checks whether they have the same identity
        value. For reference types that do not define an identity, the
        reference itself is used (eg. it is not true that [1,2] ===
        [1,2], but it is true that @a === @a).

There's a problem here, from my point of view. I'll take it one
assumption at a time:

      * $whatever.as<Object>.id ~~ $whateverelse.as<Object>.id is true
        if and only if $whatever := $whateverelse at some point in the
        past, either explicitly, or through some sort of folding.
      * Str is a boxed type, and thus is a "reference type"
      * Thus, Str should be compared by .id and not by value, according
        to the above.

So, IMHO, either there's a mistake in S03; Str is a special case WRT
===; or I misunderstand "reference type" (which S03 never defines).

Clarification please?

Two things were mentioned on IRC about this:

      * Str might be compared by .id, but .id for Str is based on the
        contents of its underlying storage... this worries me because it
        means that Strs with radically different "meanings" would be ===
        because their encoding is different.
      * A reference type might only mean containers (though S03 seems to
        imply that objects are included to me).

Thanks, and sorry for all the lame questions! I'm just trying to make
sure that the docs I write aren't utterly, worthlessly wrong. :-/

-- 
Aaron Sherman <[EMAIL PROTECTED]>
Senior Systems Engineer and Toolsmith
"We had some good machines, but they don't work no more." -Shriekback


Reply via email to