Re: [julia-users] default type parameter?

2016-09-12 Thread Mauro

On Mon, 2016-09-12 at 16:07, Yichao Yu  wrote:
> On Mon, Sep 12, 2016 at 9:52 AM, Neal Becker  wrote:
>
>> Taking the following example:
>>
>> type Point{T<:Real}
>>  x::T
>>  y::T
>> end
>>
>> I can construct a Point taking the type "T" from the argument types.
>> Or I can explicity specify the type
>>
>> Point{Int32}(2,2)
>>
>> But I'd like to be able to specify a default type:
>>
>> type Point{T<:Real=Int32}
>>
>> for example, so that an unqualified
>> Point(2,2)
>>
>> would produce Point{Int32}, while still allowing explicity
>> Point{Int64}(2,2)
>>
>
> Overload `Point` to do exactly that.
>
> `Point(x, y) = Point{Int32}(x, y)`
>
> Note that having types as first class object (different from c++) we can't
> have default type parameters at type level since we need the `Point` in
> `Point` and `Point{Int64}` to mean exactly the same thing.

This actually doesn't work because the default constructor is more
specific for (Int,Int) arguments:

Providing this constructor works:

Point{T<:Real}(x::T,y::T) = Point{Int32}(x,y)

Note, this is quite fiddly as these don't work:

Point(x,y) = Point{Int32}(x,y)
Point{T}(x::T,y::T) = Point{Int32}(x,y)

as the default constructor has the signature Point{T<:Real}(x::T,y::T)
which is more specific than above two non-working functions.

Depending on your needs, you can also add above catch-all:
Point(x,y) = Point{Int32}(x,y)

then this works too:

julia> Point(4,5.)
Point{Int32}(4,5)


Re: [julia-users] default type parameter?

2016-09-12 Thread Yichao Yu
On Mon, Sep 12, 2016 at 9:52 AM, Neal Becker  wrote:

> Taking the following example:
>
> type Point{T<:Real}
>  x::T
>  y::T
> end
>
> I can construct a Point taking the type "T" from the argument types.
> Or I can explicity specify the type
>
> Point{Int32}(2,2)
>
> But I'd like to be able to specify a default type:
>
> type Point{T<:Real=Int32}
>
> for example, so that an unqualified
> Point(2,2)
>
> would produce Point{Int32}, while still allowing explicity
> Point{Int64}(2,2)
>

Overload `Point` to do exactly that.

`Point(x, y) = Point{Int32}(x, y)`

Note that having types as first class object (different from c++) we can't
have default type parameters at type level since we need the `Point` in
`Point` and `Point{Int64}` to mean exactly the same thing.


>
> I don't see a way to do that
>
>


[julia-users] default type parameter?

2016-09-12 Thread Neal Becker
Taking the following example:

type Point{T<:Real}
 x::T
 y::T
end

I can construct a Point taking the type "T" from the argument types.
Or I can explicity specify the type

Point{Int32}(2,2)

But I'd like to be able to specify a default type:

type Point{T<:Real=Int32}

for example, so that an unqualified
Point(2,2)

would produce Point{Int32}, while still allowing explicity
Point{Int64}(2,2)

I don't see a way to do that