Skip to content

Instantly share code, notes, and snippets.

@bbarker
Last active May 20, 2020 17:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bbarker/903ff7608e20bdcac09656b2803fa76c to your computer and use it in GitHub Desktop.
Save bbarker/903ff7608e20bdcac09656b2803fa76c to your computer and use it in GitHub Desktop.
playing with array references in Nim
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