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

Julia 指定包含任意数字的向量/数组的类型,julia,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

朱莉娅是新来的-所以我为这个简单的问题道歉,只是似乎在任何地方都找不到答案:

我试图创建一个函数,该函数将向量作为参数,但强制该向量包含数字(浮点数或整数)

我觉得应该这样写:

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
,这会起作用,但不会提供我想要的类型检查强制。

您可以编写

function foo(x::Vector{T}) where {T<:Number}
    return x.^2
end
如果确实只想允许浮点和整数,可以执行以下操作:

function foo(x::AbstractVector{<:Union{AbstractFloat, Integer}})
    return x.^2
end
函数foo(x::AbstractVector{您可以编写

function foo(x::Vector{T}) where {T<:Number}
    return x.^2
end
如果确实只想允许浮点和整数,可以执行以下操作:

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

函数foo(x::AbstractVector{如果OP只支持浮点和整数(例如不支持
复杂的
),那么如果OP只支持浮点和整数(例如不支持
复杂的
),那么最好用
实的
替换
数字
)然后最好用
Real
替换
Number
,DNF的答案是正确的,但另外注意,最好对函数参数类型使用
AbstractVector
,而不是
Vector
,除非您有充分的理由。答案中的代码将在
foo(1:4)上失败
,例如。DNF的答案是正确的,但另外请注意,最好对函数参数类型使用
AbstractVector
,而不是
Vector
,除非您另有充分理由。例如,答案中的代码将在
foo(1:4)
上失败。