复合类型的子类型

时间:2015-06-16 09:07:30

标签: julia

我试图制作ismatch的矢量化版本。

Base.ismatch
function ismatch(vector::Vector, regex::Regex)
  [ismatch(regex, string) for string in vector]
end

这有效,但是这个

Base.ismatch
function ismatch(vector::Vector{String}, regex::Regex)
  [ismatch(regex, string) for string in vector]
end

并不是因为Vector {ASCIIString}<:Vector {String}为false。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:7)

您的结果的原因是julias不变的打字系统。这意味着,虽然ASCIIString <: Stringtrue,但Vector{ASCIIString} <: Vector{String}false

要四处走动,请使用参数类型:

import Base.ismatch
function ismatch{T<:String}(vector::Vector{T}, regex::Regex)
   [ismatch(regex,string), for string in vector]
end