I have found such example when seq is immutable
    
    
    type B* = object
        myseq: seq[int]
    
    
    type A* = object
        bseq*: seq[B]
    
    
    proc test1() =
        var b: B
        b.myseq = newSeq[int]()
        var i = 0
        while i < len(b.myseq):
            if b.myseq[i] == 10:
                b.myseq.del(i) # mutable
    
    
    proc test() =
        var b: B
        b.myseq = newSeq[int]()
        var a: A
        a.bseq = newSeq[B]()
        var j = 0
        while j < len(a.bseq):
            var myb = a.bseq[j]
            var i = 0
            while i < len(myb.myseq):
                myb.myseq.del(i) # mutable
                i += 1
            j += 1
    
    
    proc test2() =
        var b: B
        b.myseq = newSeq[int]()
        var a: A
        a.bseq = newSeq[B]()
        for myb in a.bseq:
            var i = 0
            while i < len(myb.myseq):
                myb.myseq.del(i) # immutable
                i += 1
    
    

It seems that in test2 it is "for myb in a.bseq" which makes later myb.myseq 
immutable but with comparison to test1 and test I have feeling that it is a bit 
inconsistent. Why "for myb in a.bseq:" makes it immutable whilst myb = 
a.bseq[j] not? Or maybe I am wrong at all...

Reply via email to