Julia中的以下代码:
function foo(a::Vector{AbstractString})
end
foo(["a"])
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
ERROR: MethodError: no method matching foo(::Array{String,1})
Closest candidates are:
foo(::Array{AbstractString,1}) at REPL[77]:2
Run Code Online (Sandbox Code Playgroud)
即使以下代码运行,如预期的那样:
function foo(a::Vector{String})
end
foo(["a"])
Run Code Online (Sandbox Code Playgroud)
此外,AbstractString
通常匹配String
如下:
function foo(::AbstractString)
end
foo("a")
Run Code Online (Sandbox Code Playgroud)
Vector{AbstractString}
如果我有String
元素,如何用参数调用函数?
Ste*_*ski 10
你需要像这样编写函数签名:
function foo{S<:AbstractString}(a::Vector{S})
# do stuff
end
Run Code Online (Sandbox Code Playgroud)
在朱莉娅0.6和更新,它也可以写
function foo(a::Vector{<:AbstractString})
# do stuff
end
Run Code Online (Sandbox Code Playgroud)
这是Julia中参数类型不变性的结果.有关详细信息,请参阅手册中的类型一章.