作为函数的输入,我需要一个值大于或等于零的向量。
我尝试了
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)
部分。
您正在寻找的类型可能是
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)