# Method overwritten by keyword-arguments-only version

**URL:** <https://discourse.julialang.org/t/method-overwritten-by-keyword-arguments-only-version/14484>\
**Category:** General Usage\
**Created:** [September 3, 2018, 1:56pm UTC](https://discourse.julialang.org/t/method-overwritten-by-keyword-arguments-only-version/14484 "2018-09-03T13:56:26Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![DominiqueMakowski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dominiquemakowski/32/51410_2.png) [@DominiqueMakowski](https://discourse.julialang.org/u/DominiqueMakowski)\
**Post date:** [September 3, 2018, 1:56pm UTC](https://discourse.julialang.org/t/method-overwritten-by-keyword-arguments-only-version/14484/1 "2018-09-03T13:56:26Z")

</div>

I’d like to have two versions of a function, with and without kwargs. On Julia 0.7, these two lines run without problem:

```julia
f(x=3) = x+3
f(; x=3) = f(x)

```

however, upon compilation of the module, it says

`WARNING: Method definition f() in module ...at ...\...:27 overwritten at ...\...:28.`

Is it a bad thing to do?

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [September 3, 2018, 2:03pm UTC](https://discourse.julialang.org/t/method-overwritten-by-keyword-arguments-only-version/14484/2 "2018-09-03T14:03:58Z")

</div>

It is a true overwrite. In this case it’s not “bad” since the two are actually doing the same thing. However, to reduce code duplication you cn just not have that optional positional argument and let the kw version provide the `f()`.

---

<div class="post-metadata">

**Author:** ![DominiqueMakowski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dominiquemakowski/32/51410_2.png) [@DominiqueMakowski](https://discourse.julialang.org/u/DominiqueMakowski)\
**Post date:** [September 3, 2018, 2:08pm UTC](https://discourse.julialang.org/t/method-overwritten-by-keyword-arguments-only-version/14484/3 "2018-09-03T14:08:33Z")

</div>

> [@yuyichao](#):
>
> you cn just not have that optional positional argument and let the kw version provide the `f()`

You mean keeping only the keyword version? Yeah but then if I have let’s say only `g(; x=3) = x + 3` I can’t use it without keywords (`g(5)`) 🙁 I’d like to have both worlds, but I guess I have to chose.

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [September 3, 2018, 2:20pm UTC](https://discourse.julialang.org/t/method-overwritten-by-keyword-arguments-only-version/14484/4 "2018-09-03T14:20:57Z")

</div>

> [@DominiqueMakowski](#):
>
> You mean keeping only the keyword version

No. I mean not having the **optional positional argument** , not removing that whole function. Just remove that `=3` from the `f(x=3)`. That also,

> [@yuyichao](#):
>
> reduce code duplication

---

<div class="post-metadata">

**Author:** ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)\
**Post date:** [September 3, 2018, 2:24pm UTC](https://discourse.julialang.org/t/method-overwritten-by-keyword-arguments-only-version/14484/5 "2018-09-03T14:24:18Z")

</div>

```julia
f(_x=3; x=_x) = x+3
f(3) # => 6
f(x=3) # => 6

```

---

<div class="post-metadata">

**Author:** ![DominiqueMakowski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dominiquemakowski/32/51410_2.png) [@DominiqueMakowski](https://discourse.julialang.org/u/DominiqueMakowski)\
**Post date:** [September 3, 2018, 2:32pm UTC](https://discourse.julialang.org/t/method-overwritten-by-keyword-arguments-only-version/14484/6 "2018-09-03T14:32:05Z")

</div>

Interesting hack!

Thanks for your answers
