# Question on setfields

**URL:** <https://discourse.julialang.org/t/question-on-setfields/43837>\
**Category:** New to Julia\
**Tags:** question\
**Created:** [July 28, 2020, 8:23pm UTC](https://discourse.julialang.org/t/question-on-setfields/43837 "2020-07-28T20:23:21Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jojo\_Dad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jojo_dad/32/8620_2.png) [@Jojo\_Dad](https://discourse.julialang.org/u/Jojo_Dad)\
**Post date:** [July 28, 2020, 8:23pm UTC](https://discourse.julialang.org/t/question-on-setfields/43837/1 "2020-07-28T20:23:21Z")

</div>

I have a weird setfields use case:

```julia
p = Normal(1,2);
setproperties(p, μ=0.5)

```

works but I would like to do

```julia
a=:μ;
setproperties(p, a=0.5)

```

such that I can pass `a` to a function…how do I do that?

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [July 28, 2020, 8:36pm UTC](https://discourse.julialang.org/t/question-on-setfields/43837/2 "2020-07-28T20:36:09Z")

</div>

You can use `Pair` syntax for this

```julia
julia> function foo(;a =1)
       return a
       end
foo (generic function with 1 method)

julia> x = :a
:a

julia> foo(; x => 5)
5

```

---

<div class="post-metadata">

**Author:** ![Jojo\_Dad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jojo_dad/32/8620_2.png) [@Jojo\_Dad](https://discourse.julialang.org/u/Jojo_Dad)\
**Post date:** [July 28, 2020, 8:39pm UTC](https://discourse.julialang.org/t/question-on-setfields/43837/3 "2020-07-28T20:39:24Z")

</div>

Are you sure that can be used with setfields for changing a struct?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [July 28, 2020, 8:43pm UTC](https://discourse.julialang.org/t/question-on-setfields/43837/4 "2020-07-28T20:43:59Z")

</div>

Edit: See answer above.

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [July 28, 2020, 8:51pm UTC](https://discourse.julialang.org/t/question-on-setfields/43837/5 "2020-07-28T20:51:20Z")

</div>

Does it work? If it’s a keyword argument it should work. Though I dont know what package `setproperties` is from so its hard to help

---

<div class="post-metadata">

**Author:** ![Jojo\_Dad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jojo_dad/32/8620_2.png) [@Jojo\_Dad](https://discourse.julialang.org/u/Jojo_Dad)\
**Post date:** [July 29, 2020, 10:26am UTC](https://discourse.julialang.org/t/question-on-setfields/43837/6 "2020-07-29T10:26:15Z")

</div>

No, I don’t get it to work. `Setproperties` is from the package `Setfield`

---

<div class="post-metadata">

**Author:** ![hendri54](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hendri54/32/9621_2.png) [@hendri54](https://discourse.julialang.org/u/hendri54)\
**Post date:** [July 29, 2020, 11:47am UTC](https://discourse.julialang.org/t/question-on-setfields/43837/7 "2020-07-29T11:47:12Z")

</div>

```julia
julia> using Distributions, Setfield, NamedTupleTools

julia> p = Normal(1, 2)
Normal{Float64}(μ=1.0, σ=2.0)

julia> x = :μ;

julia> setproperties(p, namedtuple((x,), (0.5,)))
Normal{Float64}(μ=0.5, σ=2.0)

```

---

<div class="post-metadata">

**Author:** ![jw3126](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jw3126/32/3086_2.png) [@jw3126](https://discourse.julialang.org/u/jw3126)\
**Post date:** [July 29, 2020, 12:25pm UTC](https://discourse.julialang.org/t/question-on-setfields/43837/8 "2020-07-29T12:25:55Z")

</div>

These are already great answers. As @hendri54 noted, you can also pass `NamedTuples` to `setproperties`:

```julia
julia> using ConstructionBase # or using Setfield, if you like
julia> dist = (μ=10, σ=20, α=30);
julia> patch = (μ=1, α=2);
julia> setproperties(dist, patch)
(μ = 1, σ = 20, α = 2
julia> a = :μ; patch = (;a => 100,)
(μ = 100,)
julia> setproperties(dist, patch)
(μ = 100, σ = 20, α = 30)

```
