Given a Tuple type
`Tuple{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]`

You could do this same thing by broadcasting if you did `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)
```

2 Likes

Thanks to all those who responded. `fieldtypes`

seems to be exactly what I’m looking for.