Derp. Yes, forgot the typeof. And then indeed Union{}->Any. (Which of course
is still problematic, but much less weird.)
--Tim
On Saturday, September 12, 2015 09:06:59 AM Yichao Yu wrote:
> On Sat, Sep 12, 2015 at 6:48 AM, Tim Holy <[email protected]> wrote:
> > The problem with this approach:
> >
> > julia> function foo(mt::MyType)
> >
> > T = mt.parameters[1]
>
> should be `typeof(mt)` or sth like that.
>
> > a = Array(T, 5)
> > a[3] = 7
> > a
> >
> > end
> >
> > foo (generic function with 1 method)
> >
> > julia> @code_warntype foo(MyType{Int,Float64}())
> >
> > Variables:
> > mt::MyType{Int64,Float64}
> > T::Union{}
> > a::Union{}
> >
> > Body:
> > begin # none, line 2:
> > T = (Main.getindex)((top(getfield))
> >
> > (mt::MyType{Int64,Float64},:parameters)::Union{},1)::Union{} # none, line
3:
> > a = call(Main.Array,T::Union{},5)::Union{} # none, line 4:
> > (Main.setindex!)(a::Union{},7,3)::Union{} # none, line 5:
> > return a::Union{}
> >
> > end::Union{}
> >
> > Those Union{}s will kill performance.
>
> And these should be `Any`.
>
> > --Tim
> >
> > On Friday, September 11, 2015 12:54:12 PM David Gold wrote:
> >> I'm not convinced it's more Julian to use such a helper function, since
> >> it
> >> will needlessly compile a different method for each distinct set of
> >> parameters. Directly accessing the `parameter` field of the type in
> >> question avoids this.
> >>
> >> On Friday, September 11, 2015 at 12:30:16 PM UTC-7, Josh Langsfeld wrote:
> >> > You can access the 'parameters' field of a type instance object. But
> >> > the
> >> > standard Julian way to get type parameters is to just define a helper
> >> > function:
> >> >
> >> > typeparams{A,B}(::Type{T{A,B}}) = A,B
> >> >
> >> > On Friday, September 11, 2015 at 3:20:17 PM UTC-4, Erik Schnetter
wrote:
> >> >> Is there a function in Julia that allows accessing the parameters of a
> >> >> type?
> >> >>
> >> >> For example, if I have
> >> >>
> >> >> type T{A,B} end
> >> >>
> >> >> then I'd like a way to convert `T{Int, Char}` to `(Int, Char)`.
> >> >>
> >> >> In other words, is there a way to get at the contents of `DataType`
> >> >> objects?
> >> >>
> >> >> Thanks,
> >> >> -erik