seq
私は約1日Nimを試してきましたが、操作するプロシージャがseq
カスタムタイプも処理できるように、タイプをビルトインから継承する方法を知りたいと思っていました。
TestCol
以下に、 a がシーケンスをラップ/プロキシする最小限の例を含めました。手順を再定義せずに、 などをTestCol
サポートする方法はありますか?map
filter
type
TestCol*[T] = object
data*: seq[T]
proc len*(b: TestCol): int = b.data.len
proc `[]`*[T](b: TestCol[T], idx: int): T =
b.data[idx]
proc `[]=`*[T](b: var TestCol[T], idx: int, item: T) =
b.data[idx] = item
var x = newSeq[int](3)
var y = TestCol[int](data: x)
y[0] = 1
y[1] = 2
y[2] = 3
for n in map(y, proc (x: int): int = x + 1):
echo($n)
できれば、解決策として、パフォーマンス上の理由からカスタム シーケンスを通常のシーケンスに変換する必要はありません。変換は上記よりも簡単ではありません (def- で提案されているように、今のところはそのようにします)。
実際の使用例は、 RingBuffer.nimに配列ヘルパーを実装することです。