4 ms·
In all of those cases, you're probably passing a reference by value, semantically. ("Probably", because you didn't specify which languages, so I'm making an edu
by lvh 10y ago
In all of those cases, you're probably passing a reference by value, semantically. ("Probably", because you didn't specify which languages, so I'm making an educated guess.)
The usual litmus test is having two objects (or ints or whatever), write a fn `swap(a, b)` where the two are swapped after the call is over. Can't do that in Java or Go or Python or C; but you can in e.g. C++ and you sorta-can in Lisp. In C++, you'd see int& (or whatever) show up in the arguments of swap().
- jbooth 10y agoOk, yeah, I saw upthread about C++ and Pascal having a more formal reference type. But in C and Go you can pass pointers to pointers, in Java and Python objects with mutable object references.. It seems like the whole article could have been "Go does not have the C++ reference type, so it's not really in the mix when calling functions".
- lvh 10y agoYep. "Reference type" is a confused and overloaded term, so I prefer to say "pass-by-reference" when I meant int& and "pass-as-reference" (or the, in my opinion confused and confusing, pass-by-object, if that's helpful to the listener).
- Myrmornis 10y agoJust to be clear, the rules of your swap challenge are that the arguments of the function have to be ints, not allowed to be int *, right? Also you say "two objects", but if the objects were compound, e.g. arrays, then I could write swap in C.
- lvh 10y agoYes. It's about swapping the arguments. With a struct or an array or a pointer or whatever, you're not swapping the arguments themselves; but the fact that there are so many things that do something slightly similar probably illustrates the limited utility of pass-by-reference.