https://github.com/JuliaLang/julia/issues/4648
On Tue, Dec 8, 2015 at 12:13 AM, Gustavo Goretkin < [email protected]> wrote: > Similarly, > > julia> immutable bar > a::Float64 > end > > julia> bar(NaN) == bar(NaN) > true > > julia> NaN == NaN > false > > On Mon, Dec 7, 2015 at 8:24 PM, Seth <[email protected]> wrote: > >> I was just about to post this result, which I don't understand. Why should >> >> 0.0 == -0.0 >> >> but bar(0.0) != bar(-0.0) when bar is immutable? (yes, you can override >> == for this to be ==(x::bar, y::bar) = x.a == y.a, but that seems as if it >> should be unnecessary.) >> >> >> On Monday, December 7, 2015 at 5:14:28 PM UTC-8, Yichao Yu wrote: >> >>> On Mon, Dec 7, 2015 at 7:01 PM, Davide Lasagna <[email protected]> >>> wrote: >>> > Cool! Thanks >>> >>> Also note that since your type is mutable, the default `==` is object >>> identity and your `a` and `b` won't equal even if their content are >>> the same by default. An `immutable` type will compare the content by >>> default (although `-0.0` and `0.0` have different bit pattern and >>> won't equal as a field by default as you pointed out). >>> >>> ``` >>> julia> type foo >>> a::Float64 >>> end >>> >>> julia> b = foo(0) >>> foo(0.0) >>> >>> julia> a = foo(0) >>> foo(0.0) >>> >>> julia> a == b >>> false >>> >>> julia> immutable bar >>> a::Float64 >>> end >>> >>> julia> b = bar(0) >>> bar(0.0) >>> >>> julia> a = bar(0) >>> bar(0.0) >>> >>> julia> a == b >>> true >>> >>> julia> bar(0.0) == bar(-0.0) >>> false >>> ``` >>> >> >
