<details>
  <summary>`versioninfo()`</summary>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="julia&gt; versioninfo()
Julia Version 1.5.1
Commit 697e782ab8 (2020-08-25 20:08 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin19.5.0)
  CPU: Intel(R) Core(TM) m3-7Y32 CPU @ 1.10GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-9.0.1 (ORCJIT, skylake)"><pre lang="julia-repl" class="notranslate"><code class="notranslate">julia&gt; versioninfo()
Julia Version 1.5.1
Commit 697e782ab8 (2020-08-25 20:08 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin19.5.0)
  CPU: Intel(R) Core(TM) m3-7Y32 CPU @ 1.10GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-9.0.1 (ORCJIT, skylake)
</code></pre></div>
</details>
<p dir="auto">Currently:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="julia&gt; f(;x) = &quot;x = $x&quot;
f (generic function with 1 method)

julia&gt; f(x=1)
&quot;x = 1&quot;

julia&gt; f(;y) = &quot;y = $y&quot;
f (generic function with 1 method)

julia&gt; f(x=1)
ERROR: UndefKeywordError: keyword argument y not assigned
Stacktrace:
 [1] top-level scope at REPL[7]:1"><pre lang="julia-repl" class="notranslate"><code class="notranslate">julia&gt; f(;x) = "x = $x"
f (generic function with 1 method)

julia&gt; f(x=1)
"x = 1"

julia&gt; f(;y) = "y = $y"
f (generic function with 1 method)

julia&gt; f(x=1)
ERROR: UndefKeywordError: keyword argument y not assigned
Stacktrace:
 [1] top-level scope at REPL[7]:1
</code></pre></div>
<p dir="auto">x and y are not specified by default, so this cannot be treated as function redefinition.</p>
<p dir="auto">However, I understand the problem here: while <code class="notranslate">f(;x)</code>, <code class="notranslate">f(;y)</code> or <code class="notranslate">f(;x=1)</code>, <code class="notranslate">f(;y)</code> are different function definitions, <code class="notranslate">f(;x=1)</code>, <code class="notranslate">f(;y=2)</code> contain function redefinition.</p>
<p dir="auto">Expected behavior:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="julia&gt; f(;x) = &quot;x = $x&quot;
f (generic function with 1 method)

julia&gt; f(;y) = &quot;y = $y&quot;
f (generic function with 2 methods)

julia&gt; f(x=1)
&quot;x = 1&quot;

julia&gt; f(y=1)
&quot;y = 1&quot;

julia&gt; g(;x=1) = &quot;x = $x&quot;
g (generic function with 1 method)

julia&gt; g()
&quot;x = 1&quot;

julia&gt; g(;y=2) = &quot;y = $y&quot;
g (generic function with 2 methods)

julia&gt; g()
&quot;y = 2&quot;

julia&gt; g(x=8)
&quot;x = 8&quot;

julia&gt; g(y=12)
&quot;y = 12&quot;"><pre lang="julia-repl" class="notranslate"><code class="notranslate">julia&gt; f(;x) = "x = $x"
f (generic function with 1 method)

julia&gt; f(;y) = "y = $y"
f (generic function with 2 methods)

julia&gt; f(x=1)
"x = 1"

julia&gt; f(y=1)
"y = 1"

julia&gt; g(;x=1) = "x = $x"
g (generic function with 1 method)

julia&gt; g()
"x = 1"

julia&gt; g(;y=2) = "y = $y"
g (generic function with 2 methods)

julia&gt; g()
"y = 2"

julia&gt; g(x=8)
"x = 8"

julia&gt; g(y=12)
"y = 12"
</code></pre></div>
<p dir="auto">This way it's probably less confusing.</p>
<p dir="auto">PS: This example here is only to show the problem, here it is probably easier just to use <code class="notranslate">f(; kw...)</code> and process them later. However, sometimes different argument names correspond to completely different characteristics of a function so it would be easier to just define them as 2 different functions rather than processing kw args.</p>
<p dir="auto">Not sure whether this is by design or something can be improved upon.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="myfunc(; x::Int64=1) = x + 1
myfunc(; y::Int64=1) = y + 1"><pre class="notranslate"><code class="notranslate">myfunc(; x::Int64=1) = x + 1
myfunc(; y::Int64=1) = y + 1
</code></pre></div>
<p dir="auto">Below are the results of calling these functions.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="julia&gt; myfunc(x=1);
ERROR: unrecognized keyword argument &quot;x&quot;
julia&gt; myfunc(y=2);"><pre class="notranslate"><code class="notranslate">julia&gt; myfunc(x=1);
ERROR: unrecognized keyword argument "x"
julia&gt; myfunc(y=2);
</code></pre></div>
<p dir="auto">The second definition of <code class="notranslate">myfunc</code> overrides the first one given that keyword arguments are not part of the function signature. It implies we can define generic functions with different keyword arguments.</p>
<p dir="auto">The question is whether it is by design, or is there any way to achieve the similar effect?</p>