Log In  

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)

[Please log in to post a comment]

Follow Lexaloffle:          
Generated 2024-03-29 15:11:37 | 0.009s | Q:22