Tôi đã thử nghiệm với Nim trong khoảng một ngày và tôi đã tự hỏi làm thế nào bạn có thể tạo ra một kiểu kế thừa từ nội trang (seq
) để các thủ tục hoạt động trên seq
cũng có thể xử lý tùy chỉnh kiểu.Kế thừa các chuỗi trong Nim
tôi đã bao gồm một ví dụ nhỏ dưới đây, trong đó một kết thúc tốt đẹp TestCol
/proxy một chuỗi - sẽ có thể là một cách để có TestCol
hỗ trợ map
, filter
, vv mà không cần xác định lại các thủ tục?
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)
Được ưu tiên là giải pháp sẽ không yêu cầu chuyển chuỗi tùy chỉnh cho một chuỗi bình thường vì lý do hiệu suất với biến đổi ít tầm thường hơn ở trên (mặc dù đó là những gì tôi sẽ làm cho bây giờ như def- gợi ý)
trường hợp sử dụng thế giới thực sự là để thực hiện những người giúp đỡ mảng trên RingBuffer.nim
Có cách nào để trình biến đổi trở thành trình lặp/máy phát - ví dụ: nếu bạn muốn triển khai tìm kiếm nhị phân 'và trình tự là một proxy đơn giản hơn (bộ đệm tròn trong trường hợp của tôi) – megawac