lua-users home
lua-l archive

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


---------------------
So in Lua:

   somefunc(3)
   somefunc(someobj)

both do exactly the same thing: somefunc is passed the value, which is
3 or someobj, respectively. It cannot mutate 3, so the difference is
ignorable, but it may be able to mutate someobj (if someobj were a
mutable object), and if it does, it is mutating the same value as was
passed to it.
---------------------
Ok, so provided the object isn't const, then the summary (in my lingo) is:

lua passes primitives by value, and ADTs by reference.

I presume you'll tell me I'm mistaken, but man I gotta tell you, the
explanation of why passing by reference in lua, is not passing by
reference - is altogether too esoteric for me.  :)

Don't feel bad, the C# people can't help me either.  Every stupid C# book
explains that arguments are passed by value reference types that are values,
not references, but are passed as references but not called references. ya.
Incidentally, I have many books on C# - and none of them have made a
sensible explanation of what is happening in C# argument passing (they
invariably contradict themselves from sentence to sentence, and paragraph to
paragraph on this particular topic).  Perhaps I just need a brain upgrade
for C# or lua mastery.  :(

-Brent