Ruud H.G. van Tol on Tue, 11 Mar 2025 16:00:21 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: calling by reference



On 2025-03-11 15:46, Bill Allombert wrote:
On Tue, Mar 11, 2025 at 03:27:28PM +0100, Ruud H.G. van Tol wrote:
The user manual states:

2.7.2 [...] If an argument is prefixed by a tilde ~ in the function
declaration and the call, it is passed by reference. (If either the
declaration or the call is missing a tilde, we revert to a call by value.)
Actually it depends if the variable is lexically or dynamically scoped.
Please do not forget the ~!

But with a dynamically scoped L:

? L=List([1,2,3]); print(L); listinsert(L,42,1); print(L); listpop(L,2); print(L);
List([1, 2, 3])
List([42, 1, 2, 3])
List([42, 2, 3])

the missing ~ appears to work fine.


I normally avoid using non-lexically scoped variables,
and I generally code with the ~,
so I was never bitten by this,
but then I got asked why I was doing that. :)
(so I did some tests and got surprised)

-- Ruud