要注意两个方面:
(1)函数定义中最好使用最基础的类型定义,如下所示;
(2) 泛型定义方式要正确
示例代码:
正确的示例:
function foo(a::Vector{String})
end
foo(["a"])
function foo(::AbstractString)
end
foo("a")
如果是集合,应该是这样的:
function foo(a::Vector{<:AbstractString})
# do stuff
end
错误的示例:
function foo(a::Vector{AbstractString})
end
foo(["a"])
报异常:
# MethodError: no method matching foo(::Array{String,1})
# Closest candidates are:
# foo(!Matched::Array{AbstractString,1}) at D:\Julia\jbl\test3:2
# top-level scope at test3:4
在0.6版本以前是可以的,我用的是1.3 版本就报错了
function foo{S<:AbstractString}(a::Vector{S})
# do stuff
end
# UndefVarError: S not defined
# top-level scope at test3:20