# Unpacking struct properties

**URL:** <https://discourse.julialang.org/t/unpacking-struct-properties/89758>\
**Category:** New to Julia\
**Created:** [November 4, 2022, 6:49am UTC](https://discourse.julialang.org/t/unpacking-struct-properties/89758 "2022-11-04T06:49:52Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Brian1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/brian1/32/49250_2.png) [@Brian1](https://discourse.julialang.org/u/Brian1)\
**Post date:** [November 4, 2022, 6:49am UTC](https://discourse.julialang.org/t/unpacking-struct-properties/89758/1 "2022-11-04T06:49:52Z")

</div>

```julia
struct A
    a::Int
    b::Int
end

a, b = A(10, 20)

```

I found an anwer before, but I can’t find it anymore.  
How can I do it?

---

<div class="post-metadata">

**Author:** ![jar1](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@jar1](https://discourse.julialang.org/u/jar1)\
**Post date:** [November 4, 2022, 6:51am UTC](https://discourse.julialang.org/t/unpacking-struct-properties/89758/2 "2022-11-04T06:51:01Z")

</div>

`(;a,b) = `

---

<div class="post-metadata">

**Author:** ![Brian1](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/brian1/32/49250_2.png) [@Brian1](https://discourse.julialang.org/u/Brian1)\
**Post date:** [November 4, 2022, 6:55am UTC](https://discourse.julialang.org/t/unpacking-struct-properties/89758/3 "2022-11-04T06:55:33Z")

</div>

Thanks for your replly. I think it is a little of messy. Is there a more brief way?  
like:

```julia
Base.iterate(x::A, i::Int) = iterate((x.a, x.b), i)

```

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [November 4, 2022, 8:03am UTC](https://discourse.julialang.org/t/unpacking-struct-properties/89758/4 "2022-11-04T08:03:21Z")

</div>

You can do

```julia
Base.iterate(x::A, i = 1) = (i <= fieldcount(A)) ? (getfield(x, i), i + 1) : nothing

```

but I wouldn’t really recommend it. The struct destructuring syntax is based on names instead of order and thus allows extracting arbitrary subsets of the fields and is insensitive to reordering of the fields.
