为什么数组{Float64,1}不是Julia中数组{Real,1}的子类型?

为什么数组{Float64,1}不是Julia中数组{Real,1}的子类型?,julia,Julia,我正在尝试编写一个Julia函数,它可以接受一维Int64和Float64数组作为输入参数。在不定义两个版本(一个用于Int64,另一个用于Float64)的情况下,如何做到这一点 我尝试使用数组{Real,1}作为输入参数类型。但是,由于数组{Int64,1}不是数组{Real,1}的子类型,因此这无法工作。一种真正的、不安全的方法是,例如: function square(x) # The point is for element-wise operation out = x

我正在尝试编写一个Julia函数,它可以接受一维Int64和Float64数组作为输入参数。在不定义两个版本(一个用于Int64,另一个用于Float64)的情况下,如何做到这一点


我尝试使用数组{Real,1}作为输入参数类型。但是,由于数组{Int64,1}不是数组{Real,1}的子类型,因此这无法工作。

一种真正的、不安全的方法是,例如:


function square(x)
# The point is for element-wise operation
       out = x.*x
end


输出:

julia> square(2)
4

julia> square([2 2 2])
1×3 Array{Int64,2}:
 4  4  4


你试过数组吗{我试过了,它能用。非常感谢。但我很好奇为什么它能用?它们之间有什么区别?有关更多信息以及不变性和协方差的定义,请参阅。你最感兴趣的是如何使用这个设计,还是为什么这个设计一开始就是这样?