Julia - UTF8行为的数组

时间:2016-09-20 11:05:46

标签: julia

我遇到了一个我已经解决的问题,但为什么解决方案的工作原理对我没有意义

我有一个类似于这个的功能

function testB(a::Array{AbstractString})
   println(a)
end

像这样运行它给了我

testB(convert(Array{UTF8String},["a","b"]))
ERROR: MethodError: `testB` has no method matching     
testB(::Array{UTF8String,1})

注意我实际上并没有手动转换为UTF8,它用于演示,实际上我有一个AbstractString数组,但是当我从中获取元素时,它们就变成了UFT8

我的解决方案简而言之

function testA{T <: AbstractString}(a::Array{T})
   println(a)
end
运行此方法

testA(convert(Array{UTF8String},["a","b"]))
UTF8String["a","b"]

任何人都可以告诉我为什么testA有效,但testB没有? 此外,这个{T <: SomeDataType}符号是否有名称?

1 个答案:

答案 0 :(得分:1)

虽然UTF8StringAbstractString的子类型,但Array{UTF8String} Array{AbstractString}的子类型(无协方差)。因此你的testB不起作用。 (但testB(convert(Array{AbstractString},["a","b"]))应该有用。)

为什么它必须是这样的基本原理:函数f(x::Vector{AbstractString})可以例如push!FooString x {假设FooStringAbstractString的子类型。现在,如果x实际上是Vector{UTF8String},则会失败。