I came across a situation where using a let statement on a value object created a reference. I then correlated it with this closed bug report. So, is this expected behavior?:
Works as normal:
var data: Table[string, string]
data["key"] = "val"
let oldData = data
data.clear()
echo $oldData # Echoes {"key": "val"} as expected
Unexpected (uses let):
proc doSomething(self: var Table[string, string]) =
let data = self
self.clear()
echo $data # Echoes {} which isn't expected
var data: Table[string, string]
data["key"] = "val"
data.doSomething()
Works as normal (uses var):
proc doSomething(self: var Table[string, string]) =
var data = self
self.clear()
echo $data # Echoes {"key": "val"} as expected
var data: Table[string, string]
data["key"] = "val"
data.doSomething()