指定包含任何数字的向量/数组的类型

时间:2017-10-08 16:18:27

标签: julia

朱莉娅全新 - 所以我为这个简单的问题道歉,似乎无法在任何地方找到答案:

我正在尝试创建一个以向量作为参数的函数,但强制该向量包含数字(浮点数或整数)。

我觉得这应该写成:

function foo(x::Vector{Number})
    return x.^2
end

但是使用foo([5.0])运行

ERROR: MethodError: no method matching foo(::Array{Float64,1})
Closest candidates are:
   foo(::Array{Number,1}) at REPL[16]:2

这是为什么?我不想诉诸x::Vector,这可行,但不提供我想要的类型检查执行。

1 个答案:

答案 0 :(得分:3)

你可以写

function foo(x::Vector{T}) where {T<:Number}
    return x.^2
end

这是一个简写符号

function foo(x::Vector{<:Number})
    return x.^2
end

修改:根据@Liso和@MichaelKBorregaard的评论,我建议如下,不允许Complex并允许AbstractVector s:

function foo(x::AbstractVector{<:Real})
    return x.^2
end

如果真的只想允许浮点数和整数,你可以这样做:

function foo(x::AbstractVector{<:Union{AbstractFloat, Integer}})
    return x.^2
end

您可以根据自己的喜好获得特定或一般性的信息。