-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Closed
Description
Description
The following program with identical code blocks (but for let v. const) results in a != b. This isn't the case when the group and groups variables are explicitly initialized to @[].
let a = block:
var groups: seq[seq[int]]
for i in 0 ..< 3:
var group: seq[int]
for j in 0 ..< 3:
group.add j
groups.add group
groups
const b = block:
var groups: seq[seq[int]]
for i in 0 ..< 3:
var group: seq[int]
for j in 0 ..< 3:
group.add j
groups.add group
groups
echo a
echo bNim Version
Nim Compiler Version 1.6.10 [Linux: amd64]
and:
Nim Compiler Version 1.7.3 [Linux: amd64]
Compiled at 2022-12-01
Copyright (c) 2006-2022 by Andreas Rumpf
git hash: b36f511
Current Output
@[@[0, 1, 2], @[0, 1, 2], @[0, 1, 2]]
@[@[0, 1, 2], @[0, 1, 2, 0, 1, 2], @[0, 1, 2, 0, 1, 2, 0, 1, 2]]
Expected Output
@[@[0, 1, 2], @[0, 1, 2], @[0, 1, 2]]
@[@[0, 1, 2], @[0, 1, 2], @[0, 1, 2]]
Possible Solution
No response
Additional Information
Workaround: don't trust https://nim-lang.org/docs/manual.html#statements-and-expressions-var-statement in const blocks:
let a = block:
var groups: seq[seq[int]] = @[]
for i in 0 ..< 3:
var group: seq[int] = @[]
for j in 0 ..< 3:
group.add j
groups.add group
groups
const b = block:
var groups: seq[seq[int]] = @[]
for i in 0 ..< 3:
var group: seq[int] = @[]
for j in 0 ..< 3:
group.add j
groups.add group
groups
echo a
echo bMetadata
Metadata
Assignees
Labels
No labels