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 <milktra...@gmail.com> 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 <marc.j....@gmail.com> 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