2017-05-07 1 views
1

Ich möchte zwei array s desselben Elementtyps erstellen, um ein neues array zu erstellen, das die Elemente des ersten Arrays gefolgt von den Elementen des zweiten Arrays enthält. Da die Länge zum Typ array gehört, muss ich zur Kompilierzeit die Länge des Ergebnisses array berechnen (I1 + I2). Deshalb habe ich static[int] als Typ Einschränkung für die Längen verwenden I1 und I2:Wie werden zwei Arrays in Nim dargestellt?

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) 

Leider bekomme ich diese Fehlermeldung:

Error: cannot generate code for: I1 
    proc concat[I1, I2: static[int]; T](a: array[I1, T], b: array[I2, T]): 
              ^

Warum funktioniert es nicht? Wie reparierst du es?


Nim Compiler Version 0.16.0 (2017.01.08) [Linux: amd64]
Copyright (c) 2006-2017 von Andreas Rumpf

Antwort

2

für mich Arbeiten in Nim Entwick Zweig, so Das ist wahrscheinlich schon behoben. Sie können den Devel-Zweig abrufen oder auf das nächste Release warten.

bearbeiten: Sie können Ihren Betrieb ein bisschen kürzer durch die Art und Weise tun:

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

Danke, ich versuchte es mit _Nim Compiler Version 0.16.1 (2017.05.07) [Linux: amd64] _ (aktuelle Entwicklung Zweig) und es funktioniert gut. – maiermic

Verwandte Themen