Bizarre. I happen to have last updated on *exactly* the same commit SHA,
but I'm seeing the original (expected) behavior:
$ julia -q
julia> versioninfo()
Julia Version 0.4.0-dev+5860
Commit 7fa43ed (2015-07-08 20:57 UTC)
Platform Info:
System: Darwin (x86_64-apple-darwin14.3.0)
CPU: Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz
WORD_SIZE: 64
BLAS: libopenblas (USE64BITINT NO_AFFINITY NEHALEM)
LAPACK: libopenblas
LIBM: libopenlibm
LLVM: libLLVM-3.3
julia> type Foo
x::Int
end
julia> ==(f1::Foo, f2::Foo) = f1.x == f2.x
== (generic function with 109 methods)
julia> unique([Foo(4),Foo(4)])
2-element Array{Foo,1}:
Foo(4)
Foo(4)
julia> @which hash(Foo(4), zero(UInt))
hash(x::ANY, h::UInt64) at hashing.jl:10
Might there be some package that changes this behavior? Is the result of
`@which
hash(Foo(4), zero(Uint))` the same as what I show above?
On Thursday, July 16, 2015 at 11:02:46 AM UTC-4, Seth wrote:
>
> I can confirm this works as described by milktrader on 0.4.0-dev+5860
> (2015-07-08 20:57 UTC) Commit 7fa43ed (7 days old master).
>
> julia> unique(foos)
> 1-element Array{Foo,1}:
> Foo(4)
>
>
> On Thursday, July 16, 2015 at 7:52:03 AM UTC-7, Stefan Karpinski wrote:
>>
>> I don't see that on 0.4-dev – it also doesn't seem possible without
>> having defined a hash method since unique is implemented with a dict.
>>
>> On Thu, Jul 16, 2015 at 10:29 AM, milktrader <[email protected]> wrote:
>>
>>> Julia 0.4- has different behavior ...
>>>
>>> First, with 0.3.9
>>>
>>> julia> versioninfo()
>>> Julia Version 0.3.9
>>> Commit 31efe69 (2015-05-30 11:24 UTC)
>>> Platform Info:
>>> System: Darwin (x86_64-apple-darwin13.4.0)
>>> CPU: Intel(R) Core(TM)2 Duo CPU P7350 @ 2.00GHz
>>> WORD_SIZE: 64
>>> BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Penryn)
>>> LAPACK: libopenblas
>>> LIBM: libopenlibm
>>> LLVM: libLLVM-3.3
>>>
>>> julia> type Foo
>>> x::Int
>>> end
>>>
>>> julia> import Base: ==
>>>
>>> julia> ==(f1::Foo, f2::Foo) = f1.x == f2.x
>>> == (generic function with 80 methods)
>>>
>>> julia> foos = [Foo(4), Foo(4)]
>>> 2-element Array{Foo,1}:
>>> Foo(4)
>>> Foo(4)
>>>
>>> julia> unique(foos)
>>> 2-element Array{Foo,1}:
>>> Foo(4)
>>> Foo(4)
>>>
>>> julia> unique(foos)[1] == unique(foos)[2]
>>> true
>>>
>>> And now 0.4-dev
>>>
>>> julia> versioninfo()
>>> Julia Version 0.4.0-dev+5587
>>> Commit 78760e2 (2015-06-25 14:27 UTC)
>>> Platform Info:
>>> System: Darwin (x86_64-apple-darwin13.4.0)
>>> CPU: Intel(R) Core(TM)2 Duo CPU P7350 @ 2.00GHz
>>> WORD_SIZE: 64
>>> BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Penryn)
>>> LAPACK: libopenblas
>>> LIBM: libopenlibm
>>> LLVM: libLLVM-3.3
>>>
>>> julia> type Foo
>>> x::Int
>>> end
>>>
>>> julia> import Base: ==
>>>
>>> julia> ==(f1::Foo, f2::Foo) = f1.x == f2.x
>>> == (generic function with 108 methods)
>>>
>>> julia> foos = [Foo(4), Foo(4)]
>>> 2-element Array{Foo,1}:
>>> Foo(4)
>>> Foo(4)
>>>
>>> julia> unique(foos)
>>> 1-element Array{Foo,1}:
>>> Foo(4)
>>>
>>> julia> unique(foos)[1] == unique(foos)[2]
>>> ERROR: BoundsError: attempt to access 1-element Array{Foo,1}:
>>> Foo(4)
>>> at index [2]
>>> in getindex at array.jl:292
>>>
>>>
>>>
>>> On Thursday, July 16, 2015 at 9:36:21 AM UTC-4, Stefan Karpinski wrote:
>>>>
>>>> You need to also define a hash method for this type.
>>>>
>>>>
>>>> On Jul 16, 2015, at 9:16 AM, Marc Gallant <[email protected]> wrote:
>>>>
>>>> The unique function doesn't appear to work using iterables of custom
>>>> composite types, e.g.,
>>>>
>>>> julia> type Foo
>>>> x::Int
>>>> end
>>>>
>>>> julia> import Base: ==
>>>>
>>>> julia> ==(f1::Foo, f2::Foo) = f1.x == f2.x
>>>> == (generic function with 85 methods)
>>>>
>>>> julia> unique(foos)
>>>> 2-element Array{Foo,1}:
>>>> Foo(4)
>>>> Foo(4)
>>>>
>>>> julia> unique(foos)[1] == unique(foos)[2]
>>>> true
>>>>
>>>>
>>>> Is this the intended behaviour?
>>>>
>>>>
>>