Это исправленная версия:
function f(x::String)
println("Called first version of f")
end
function f(x::Float64)
println("Called second version of f")
end
f("x")
f(1.0)
Проблема с вашим кодом состоит в том, что ваш исходный код создал анонимную функцию и присвоил ее переменной f
. И вы сделали это дважды, поэтому f
указал только на function(x::Float64)
.
Вы можете увидеть проблему с исходным кодом, запустив его в Julia. REPL:
julia> f = function(x::String)
println("Called first version of f")
end
#3 (generic function with 1 method)
julia> f = function(x::Float64)
println("Called second version of f")
end
#5 (generic function with 1 method)
julia> methods(f)
# 1 method for generic function "#5":
[1] (::getfield(Main, Symbol("##5#6")))(x::Float64) in Main at REPL[2]:2
и вы видите, что f
указывает на анонимную функцию, которая имеет только один метод.
Выполнение моего кода (необходимо перезапустить Julia REPL, поскольку f
имя переменной уже занято и его нельзя переназначить):
julia> function f(x::String)
println("Called first version of f")
end
f (generic function with 1 method)
julia> function f(x::Float64)
println("Called second version of f")
end
f (generic function with 2 methods)
julia> f("x")
Called first version of f
julia> f(1.0)
Called second version of f
julia> methods(f)
# 2 methods for generic function "f":
[1] f(x::Float64) in Main at REPL[2]:2
[2] f(x::String) in Main at REPL[1]:2