如何定义仅包含 ≥ 0 整数的向量

问题描述 投票:0回答:1

作为函数的输入,我需要一个值大于或等于零的向量。

我尝试了

l = Array{>:Unsigned, 1}
,因为
Unsigned
Integer
的子类型。

但是

push!(l, 9
)会抛出错误。
MethodError: no method matching push!(::Type{Vector{>:Unsigned}}, ::Int64)

定义这样的数组的正确方法是什么?

使用案例:

function concat_ints(l::Array{Int64, 1})::Int64
    """
    concat_ints([3, 4, 5]) == 345
    """
    @assert all(n -> n ∈ 0:9, l) "Only digits in range 0:9 are allowed inputs"
    s = 0 # sum
    for (i, n) in enumerate(reverse(l))
        s += n * 10^(i-1)
    end
    return s
end

我想通过强制执行正确的输入类型来替换

@assert all(n -> n ∈ 0:9, l)
部分。

arrays types julia
1个回答
0
投票

您正在寻找的类型可能是

Array{<:Unsigned, 1}
,而不是
Array{>:Unsigned, 1}
。而且,
l = Array{>:Unsigned, 1}
不会创建无符号数字的向量,而是创建类型变量。

就像写作

t = Int32
。这不会使
t
成为
Int32
,而是使
t
成为类型变量。观察:

julia> t = Int32
Int32

julia> typeof(t)
DataType

julia> t = Int32(0)
0

julia> typeof(t)
Int32

所以你可能想要的是

l = Vector{UInt}()
。现在,只能将正值推入向量中:

julia> push!(l, 9)
1-element Vector{UInt64}:
 0x0000000000000009

julia> push!(l, -9)
ERROR: InexactError: convert(UInt64, -9)
© www.soinside.com 2019 - 2024. All rights reserved.