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

Reply via email to