Given a Tuple typeTuple{typeof(DXFutils.parseraction), Parser, DXFGroup, EntityType_SECTION}
how do I extract the types of the 2nd and 3rd elements, to get something like
(DXFGroup, EntityType_SECTION})`
Fieldnames
fieldnames(Tuple{typeof(DXFutils.parseraction), Parser, DXFGroup, EntityType_SECTION})
(1, 2, 3, 4)
isn’t helpful.  At leat
getfield(Tuple{typeof(DXFutils.parseraction), Parser, DXFGroup, EntityType_SECTION}, 2)
Any
doesn’t get what I’m looking for.
Any suggestions for how to do this?
Thanks.
             
            
              
            
           
          
            
            
              Two thoughts:
For a tuple t, [ typeof(element) for element in t ]  would give you a Vector that you could index into if you only needed the second and third elements i.e.[ typeof(element) for element in t ][2:3]typeof.(t)[2:3]
And although this may not answer your question exactly, as an aside, things like eltype.(t) are really informative in scenarios like this.
             
            
              1 Like 
            
            
           
          
            
              
                lmiq  
              
                  
                    September 3, 2021,  1:48pm
                   
                  3 
               
             
            
              julia> tup = (1,"abc",1+3im)
(1, "abc", 1 + 3im)
julia> typeof.(tup)
(Int64, String, Complex{Int64})
edit: already mentioned by @Derek_Vetsch 
             
            
              
            
           
          
            
              
                DNF  
              
                  
                    September 3, 2021,  1:49pm
                   
                  4 
               
             
            
              
 Mark_Nahabedian:
 
Given a Tuple type
 
 
Do you mean a value with that type, or that type variable itself?
I mean, typeof.(tup) works if your input is (1,"abc",1+3im). But if
jl> t = typeof((1,"abc",1+3im))
then
jl> typeof.(t)
DataType
 
            
              
            
           
          
            
            
              I don’t have a value, I have a type, e.g.
`Tuple{typeof(DXFutils.parseraction), Parser, DXFGroup, EntityType_SECTION}`
as might be the value of sf.linfo.def.sig, where sf is a Base.StackTraces.StackFrame.
             
            
              
            
           
          
            
              
                DNF  
              
                  
                    September 3, 2021,  2:00pm
                   
                  6 
               
             
            
              I don’t know the canonical solution, but here are two possibilities:
A hack into the internals of the tuple type:
jl> t = typeof((1,"abc",1+3im))
Tuple{Int64, String, Complex{Int64}}
jl> t.parameters[2]
String
And one more ‘proper’ solution, but a bit inelegant, imho:
jl> getttypes(::Type{Tuple{T,U,V}}, inds) where {T,U,V} = (T, U, V)[inds]
getttypes (generic function with 4 methods)
jl> getttypes(t, 1)
Int64
jl> getttypes(t, 2:3)
(String, Complex{Int64})
 
            
              1 Like 
            
            
           
          
            
            
              Maybe you are looking for the function fieldtypes,  e.g.
julia> T = Tuple{Int64,Float64,String}
Tuple{Int64, Float64,String}
julia> fieldtypes(T)[2:3]
(Float64, String)
 
            
              4 Likes 
            
            
           
          
            
            
              Thanks to all those who responded.  fieldtypes seems to be exactly what I’m looking for.