如何在 Nim 中连接两个数组?
How to concat two arrays in Nim?
我想连接两个相同元素类型的 array
以创建一个新的 array
,其中包含第一个数组的元素,然后是第二个数组的元素。由于长度是 array
类型的一部分,因此我必须在编译时计算结果 array
的长度 (I1 + I2
)。这就是为什么我使用 static[int]
作为长度 I1
和 I2
:
的类型限制
proc concat[I1, I2: static[int]; T](a: array[I1, T], b: array[I2, T]):
array[I1 + I2, T] =
for i in low(a)..high(a):
result[i] = a[i]
for i in low(b)..high(b):
result[i + high(a) + 1] = b[i]
# example
let a = [1, 2, 3, 4]
let b = [5, 6, 7]
let c = concat(a, b)
echo repr(c)
不幸的是,我收到此错误消息:
Error: cannot generate code for: I1
proc concat[I1, I2: static[int]; T](a: array[I1, T], b: array[I2, T]):
^
为什么不起作用?你是怎么解决的?
Nim 编译器版本 0.16.0 (2017-01-08) [Linux: amd64]
版权所有 (c) 2006-2017 Andreas Rumpf
我在 Nim 开发分支中工作,所以这可能已经修复了。你可以获取开发分支或等待下一个版本。
编辑:顺便说一下,您可以将操作缩短一点:
proc concat[I1, I2: static[int]; T](a: array[I1, T], b: array[I2, T]): array[I1 + I2, T] =
result[0..a.high] = a
result[a.len..result.high] = b
我想连接两个相同元素类型的 array
以创建一个新的 array
,其中包含第一个数组的元素,然后是第二个数组的元素。由于长度是 array
类型的一部分,因此我必须在编译时计算结果 array
的长度 (I1 + I2
)。这就是为什么我使用 static[int]
作为长度 I1
和 I2
:
proc concat[I1, I2: static[int]; T](a: array[I1, T], b: array[I2, T]):
array[I1 + I2, T] =
for i in low(a)..high(a):
result[i] = a[i]
for i in low(b)..high(b):
result[i + high(a) + 1] = b[i]
# example
let a = [1, 2, 3, 4]
let b = [5, 6, 7]
let c = concat(a, b)
echo repr(c)
不幸的是,我收到此错误消息:
Error: cannot generate code for: I1
proc concat[I1, I2: static[int]; T](a: array[I1, T], b: array[I2, T]):
^
为什么不起作用?你是怎么解决的?
Nim 编译器版本 0.16.0 (2017-01-08) [Linux: amd64]
版权所有 (c) 2006-2017 Andreas Rumpf
我在 Nim 开发分支中工作,所以这可能已经修复了。你可以获取开发分支或等待下一个版本。
编辑:顺便说一下,您可以将操作缩短一点:
proc concat[I1, I2: static[int]; T](a: array[I1, T], b: array[I2, T]): array[I1 + I2, T] =
result[0..a.high] = a
result[a.len..result.high] = b