Julia 同时使用字符串和子字符串
鉴于:Julia 同时使用字符串和子字符串,julia,Julia,鉴于: julia> SubString <: String false 我认为有两种方法可以做到这一点: 在函数定义中使用AbstractString而不是String 定义函数两次,一次用于字符串,一次用于子字符串,这将生成myfunction(具有两种方法的通用函数) 关键是子字符串是抽象字符串的子类型,而不是字符串。您可以通过输入supertype(SubString)看到这一点。我的经验如下:1)按照Mark的建议使用AbstractString。这应至少满足您99%的需
julia> SubString <: String
false
我认为有两种方法可以做到这一点:
AbstractString
而不是String
字符串
,一次用于子字符串
,这将生成myfunction(具有两种方法的通用函数)
关键是
子字符串
是抽象字符串
的子类型,而不是字符串
。您可以通过输入supertype(SubString)
看到这一点。我的经验如下:1)按照Mark的建议使用AbstractString
。这应至少满足您99%的需求,您可以使用其他字符串实现,例如从Strs.jl。2) 您可能会依赖以下事实,即您收到字符串
或子字符串{String}
(例如,您希望使用字符串
的特定内存布局);然后我建议使用Union{String,SubString{String}
签名。通常,将类型签名指定为子字符串
用处不大,因为子字符串
不是一种具体类型(与例如子字符串{String}
相反)。
julia> function myfunction(ss::String)
@show ss, typeof(ss)
end
myfunction (generic function with 1 method)
julia> myfunction("Hello World")
(ss, typeof(ss)) = ("Hello World", String)
("Hello World", String)
julia> s = split("Hello World")
2-element Array{SubString{String},1}:
"Hello"
"World"
julia> foreach(x -> myfunction(x), s)
ERROR: MethodError: no method matching myfunction(::SubString{String})
Closest candidates are:
myfunction(::String) at REPL[11]:2