我已经用 Nim 进行了大约一天的试验,我想知道如何使类型继承自内置函数(seq
特别是),以便操作的过程seq
也可以处理自定义类型。
我在下面包含了一个最小示例,其中 aTestCol
包装/代理了一个序列 - 是否有一种方法可以在不重新定义过程的情况下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)
出于性能原因,该解决方案最好不需要将自定义序列转换为常规序列,并且转换比上面的简单(尽管这就是我现在按照定义建议做的事情)
真实世界的用例是在RingBuffer.nim上实现数组助手