On 2020-11-27 02:30, Ned Batchelder wrote:
On 11/26/20 9:02 PM, MRAB wrote:
On 2020-11-27 01:12, Ned Batchelder wrote:
On 11/26/20 6:44 AM, 3mir33@gmail.com wrote:
Add something like Move type hint to typing module. It will tell the analyzer that the input parameter of the function is moved and can not be used after. For example: ``` def f(d: Move[dict]) -> dict: d['a'] = 2 return d
d = {1: 2} f(d) print(d[1]) # mistake, using of moved value
Maybe I'm behind the times on the latest thinking in programming languages. I'm not familiar with "move semantics". Can someone explain what is wrong with the code above? What is the mistake? `print(d[1])` will work perfectly fine. The function changes the 'a' key, and then we access the 1 key. Should the example have used the same key in both places?
d is moved into function f. f does return d when it exits, moving it out back again, but as the caller doesn't bind to it, it's discarded.
It's not discarded, it's still referenced by d in the outer scope.
No, it's not any more, and that's the point. It was _moved_ into the function, and although the function returned it, it was discarded because the caller didn't bind it to keep hold of it.