Last active
May 20, 2020 17:16
-
-
Save bbarker/903ff7608e20bdcac09656b2803fa76c to your computer and use it in GitHub Desktop.
playing with array references in Nim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func makeRefArray[I,T](initArray: array[I,T]): ref array[I,T] = | |
var refArr: ref array[I, T] | |
new(refArr) | |
refArr[] = initArray | |
refArr | |
# We can't assign to a normal let-array | |
# let myArr = [1,2,1] | |
# myArr[1] = 5 | |
# But we can assign to a refArray | |
let myRArr = makeRefArray([1,2,1]) | |
myRArr[][1] = 5 | |
echo myRArr[] | |
# Unfortunately we can also do this | |
myRArr[] = [3,3,3] | |
echo myRArr[] | |
## Try 2 (with ref object) | |
type RefArray[I,T] = ref object | |
arr: array[I,T] | |
func `[]`[I,T] (rArr: RefArray[I,T], ix: I): T = rArr.arr[ix] | |
func `[]=`[I,T] (rArr: RefArray[I,T], ix: I, val: T) = | |
rArr.arr[ix] = val | |
func makeORefArray[I,T](initArray: array[I,T]): RefArray[I,T] = | |
let refArr = RefArray[I, T](arr: initArray) | |
refArr | |
let myORArr = makeORefArray([1,2,1]) | |
myORArr[1] = 5 | |
echo myORArr.arr | |
# Unfortunately we can also do this (though only in the module, I think) | |
myORArr.arr = [3,3,3] | |
echo myORArr.arr | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment