1

I'm trying to write a function to switch negative to positive and vise-versa. I've got:

 ```foot=3 function switch(f) f*=-1 end ```

when I call switch(foot) it returns the original value but if at the command prompt I type "foot*=-1 it preforms as expected.

Thanks for any help and sorry for these remedial questions.

--
-john

P#41424 2017-06-09 01:49 ( Edited 2017-06-12 23:25)

Try this:

 ```foot=3 function switch(f) return f*-1 end foot=switch(foot) print(foot) ```
P#41425 2017-06-09 02:29 ( Edited 2017-06-09 06:29)

You can also write -foot without any multiplication.

P#41428 2017-06-09 02:42 ( Edited 2017-06-09 06:42)

Why not just:

 ```foot = 3 print(-foot) ```

and to "switch":

 ```foot = -foot ```
P#41429 2017-06-09 02:44 ( Edited 2017-06-09 06:44)

Thanks for all the feedback, I'm still unclear as to why my original snippet didn't work. I was under the impression that pico8(lua) was a "pass by reference" language. Here is a non math version that also doesn't do what I expect it to:

 ```foot="foo" function switch(f) f="bar" end switch(foot) print(foot) ```

returns foo

P#41495 2017-06-09 15:53 ( Edited 2017-06-09 19:54)

Strings and numbers are not passed as a reference, no. Only tables are. Strings aren't even moddable in-place, you can only construct new string values.

P#41498 2017-06-09 16:28 ( Edited 2017-06-09 20:28)

ahh, thank you @JTE

P#41499 2017-06-09 17:11 ( Edited 2017-06-09 21:11)

Its a tricky but important distinction, xyzzy. In pretty much any language, saying a = x makes 'a' hold the contents of 'x', whether x is a reference or a bare value.

 ```a = 1 b = a b = 2 -- a is still 1 now ```

This code evaluates '1', and puts that value or reference in a. Then, it evaluates 'a', and puts either the value 1 or a reference to 1 in 'b'. So when we change what a was, b is unaffected.

P#41570 2017-06-12 19:25 ( Edited 2017-06-12 23:25)