# Composing new and default Kwargs

**URL:** <https://discourse.julialang.org/t/composing-new-and-default-kwargs/36745>\
**Category:** General Usage\
**Tags:** question, namedtuple, kwargs\
**Created:** [March 30, 2020, 2:57pm UTC](https://discourse.julialang.org/t/composing-new-and-default-kwargs/36745 "2020-03-30T14:57:49Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![alejandrovpm](https://avatars.discourse-cdn.com/v4/letter/a/3be4f8/32.png) [@alejandrovpm](https://discourse.julialang.org/u/alejandrovpm)\
**Post date:** [March 30, 2020, 2:57pm UTC](https://discourse.julialang.org/t/composing-new-and-default-kwargs/36745/1 "2020-03-30T14:57:49Z")

</div>

Hello,

I upgraded Julia from version 0.63 to version 1.4. To compose new and default Kwargs in Julia v0.63 I used the following function:

```julia
function foo(; kwargs...)
       defaults = (; x="default")
       merge!(defaults, kwargs)
       return defaults
end

new = (; x="new")
kwargs = foo(;x="new")

```

When I try to use the same method in Julia 1.4 the following message rises

**MethodError: no method matching merge!(::NamedTuple{(:x,),Tuple{String}}, ::Base.Iterators.Pairs{Symbol,String,Tuple{Symbol},NamedTuple{(:x,),Tuple{String}}})**

I suppose that the merge function is not well defined for this type of variable.

Do you suggest a way to do it?

---

<div class="post-metadata">

**Author:** ![mauro3](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mauro3/32/292_2.png) [@mauro3](https://discourse.julialang.org/u/mauro3)\
**Post date:** [March 30, 2020, 2:59pm UTC](https://discourse.julialang.org/t/composing-new-and-default-kwargs/36745/2 "2020-03-30T14:59:31Z")

</div>

Have you run your code on Julia 0.7? As that will give you all deprecation warnings with details on how to update the code.

---

<div class="post-metadata">

**Author:** ![alejandrovpm](https://avatars.discourse-cdn.com/v4/letter/a/3be4f8/32.png) [@alejandrovpm](https://discourse.julialang.org/u/alejandrovpm)\
**Post date:** [March 30, 2020, 3:07pm UTC](https://discourse.julialang.org/t/composing-new-and-default-kwargs/36745/3 "2020-03-30T15:07:57Z")

</div>

Sorry no I just went directly to 1.4. But you give me an Idea. @mauro3 Do you know if there is a way to run Julia 0.7 in the Web-browser??

---

<div class="post-metadata">

**Author:** ![ssfrr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ssfrr/32/3736_2.png) [@ssfrr](https://discourse.julialang.org/u/ssfrr)\
**Post date:** [March 30, 2020, 4:39pm UTC](https://discourse.julialang.org/t/composing-new-and-default-kwargs/36745/4 "2020-03-30T16:39:58Z")

</div>

> [@alejandrovpm](#):
>
> function foo(; kwargs…) defaults = (; x=“default”) merge!(defaults, kwargs) return defaults end

NamedTuples are immutable, so you can’t use `merge!`. Instead use `merge` which will return a new `NamedTuple`:

```julia
function foo(; kwargs...)
       defaults = (; x="default")
       merge(defaults, kwargs)
end

```

---

<div class="post-metadata">

**Author:** ![alejandrovpm](https://avatars.discourse-cdn.com/v4/letter/a/3be4f8/32.png) [@alejandrovpm](https://discourse.julialang.org/u/alejandrovpm)\
**Post date:** [March 30, 2020, 4:54pm UTC](https://discourse.julialang.org/t/composing-new-and-default-kwargs/36745/5 "2020-03-30T16:54:56Z")

</div>

@ssfrr Thanks for your help now it works 😄
