如何在Julia中使用更复杂类型的继承

Fer*_*enc 3 inheritance julia

我试图Any在以下函数中使用常规类型:

function f(arr::Array{Tuple{ASCIIString, Any},1})
    arr[1]
end
Run Code Online (Sandbox Code Playgroud)

它适用于

f([("a",1), ("b","x")])
Run Code Online (Sandbox Code Playgroud)

但在

f([("a",1)])
Run Code Online (Sandbox Code Playgroud)

这是行不通的.一个人认为Int实际上是一个Any,但显然不是.

如何f在后一种情况下工作?我对一般解决方案感兴趣,因为这个问题在朱莉娅的许多地方都出现了,上面只是一个简单的例子.我应该使用Union所有类型的代替Any元组吗?

Toi*_*son 7

Julia中的类型参数是不变的,请参阅http://julia.readthedocs.org/en/latest/manual/types/#parametric-composite-types.要获得您所追求的行为,您需要通过类型参数来参数化您的函数:

function f{T <: Tuple{ASCIIString, Any}}(arr::Array{T,1})
    arr[1]
end
Run Code Online (Sandbox Code Playgroud)