如何在Nim中连接两个数组?

时间:2017-05-07 17:33:37

标签: arrays concatenation concat nim

我想连接两个相同元素类型的array来创建一个新的array,其中包含第一个数组的元素,后跟第二个数组的元素。由于长度是array类型的一部分,因此我必须在编译时计算结果array的长度(I1 + I2)。这就是我使用static[int]作为长度I1I2的类型限制的原因:

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

1 个答案:

答案 0 :(得分:2)

在Nim devel分支中为我工作,所以这可能已经修复了。您可以获得devel分支或等待下一个版本。

编辑:顺便说一句,你可以缩短操作时间:

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