Dan and/or Seth, can you try that again and check if hash(foos[1]) and
hash(foos[2]) have the same last hex digit?

On Thu, Jul 16, 2015 at 11:30 AM, Matt Bauman <[email protected]> wrote:

> 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?
>>>>>
>>>>>
>>>

Reply via email to