假设一个带有关键字的函数fun()像这样重载:
function fun(; a::Real)
return a
end
function fun(; a::Vector)
return a
end
Run Code Online (Sandbox Code Playgroud)
执行以下代码时,出现类型错误TypeError: in keyword argument a, expected Vector, got a value of type Int64::
fun(1) # TypeError
fun([1, 2])
Run Code Online (Sandbox Code Playgroud)
但是当函数fun()获得正常参数时,即:
function fun(a::Real)
return a
end
function fun(a::Vector)
return a
end
Run Code Online (Sandbox Code Playgroud)
然后在此处执行此代码片段:
fun(1) # -> 1
fun([1, 2]) # -> [1, 2]
Run Code Online (Sandbox Code Playgroud)
作品。
关键字参数不可重载。换句话说,它们不参与方法分派——只有位置参数参与分派。当您定义第二个方法 时f(; a::Vector),它会覆盖第一个方法:
julia> function fun(; a::Real)
return a
end
fun (generic function with 1 method)
julia> function fun(; a::Vector)
return a
end
fun (generic function with 1 method)
julia> methods(fun)
# 1 method for generic function "fun":
[1] fun(; a) in Main at REPL[2]:1
Run Code Online (Sandbox Code Playgroud)