2017-05-07 23 views
1

我想連接兩個相同元素類型的array,創建一個新的array,其中包含第一個數組的元素,後跟第二個數組的元素。由於長度是array類型的一部分,因此我必須在編譯時計算結果array的長度(I1 + I2)。這就是爲什麼我使用static[int]類型限制的長度I1I2如何在Nim中連接兩個數組?

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]): 
              ^

爲什麼它不工作?你如何解決它?


稔編譯器版本0.16.0(2017年1月8日)的Linux:AMD64]
版權所有(C)2006至17年由Andreas朗夫

回答

2

對我的作品在稔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 
+0

謝謝,我_Nim編譯器版本試了一下0.16.1(2017年5月7日)的Linux:AMD64] _(當前devel分支),它工作正常。 – maiermic