# Decomposing struct in function argument

**URL:** <https://discourse.julialang.org/t/decomposing-struct-in-function-argument/97468>\
**Category:** General Usage\
**Tags:** question, struct, functions, destructuring\
**Created:** [April 14, 2023, 11:21am UTC](https://discourse.julialang.org/t/decomposing-struct-in-function-argument/97468 "2023-04-14T11:21:37Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [April 14, 2023, 11:21am UTC](https://discourse.julialang.org/t/decomposing-struct-in-function-argument/97468/1 "2023-04-14T11:21:37Z")

</div>

is it possible to to something like this?

```julia
struct X
    a
    b
end

f((a,b)::X) = a+b

```

---

<div class="post-metadata">

**Author:** ![sijo](https://avatars.discourse-cdn.com/v4/letter/s/da6949/32.png) [@sijo](https://discourse.julialang.org/u/sijo)\
**Post date:** [April 14, 2023, 11:25am UTC](https://discourse.julialang.org/t/decomposing-struct-in-function-argument/97468/2 "2023-04-14T11:25:32Z")

</div>

Yes, with [property destructuring](https://docs.julialang.org/en/v1/manual/functions/#Property-destructuring) (i.e. `(; ...)` syntax):

```julia
julia> struct X; a; b; end

julia> f((; a,b)::X) = a+b
f (generic function with 1 method)

julia> f(X(1,2))
3

```

---

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [May 5, 2023, 1:02am UTC](https://discourse.julialang.org/t/decomposing-struct-in-function-argument/97468/3 "2023-05-05T01:02:56Z")

</div>

These work.

```julia
 (a,b) = [1,2] #tuple (un-named )
  a,b = [1,2] #individual variables 

```

but not this

```julia
(;a,b) = [1,2]

```

Is it possible to put a vector into a NamedTuple like this ?

---

<div class="post-metadata">

**Author:** ![sijo](https://avatars.discourse-cdn.com/v4/letter/s/da6949/32.png) [@sijo](https://discourse.julialang.org/u/sijo)\
**Post date:** [May 5, 2023, 12:44pm UTC](https://discourse.julialang.org/t/decomposing-struct-in-function-argument/97468/4 "2023-05-05T12:44:41Z")

</div>

What would be the expected result?

For consistency `(; a, b) = ...` should always assign to variable `a` and `b`… If you want to create a NamedTuple from a vector, here are a few ways:

```julia
NamedTuple{(:a,:b)}([1,2])

NamedTuple((:a,:b) .=> [1,2])

(; ((:a,:b) .=> [1,2])...)

@NamedTuple{a::Int, b::Int}([1,2]) # to choose field types explicitly

```

---

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [May 8, 2023, 12:06am UTC](https://discourse.julialang.org/t/decomposing-struct-in-function-argument/97468/5 "2023-05-08T00:06:08Z")

</div>

Thanks 🙂
