Difference between revisions of "Macro Functions"
From GiderosMobile
(formatting + added another example from @perrochon) |
m (→Examples) |
||
Line 64: | Line 64: | ||
'''A Sum macro example''' | '''A Sum macro example''' | ||
<source lang="lua"> | <source lang="lua"> | ||
− | -- comma counts as an argument meaning | + | -- comma counts as an argument meaning MYSUM(o1, o2) has three parameters |
− | + | MYSUM @ (| return "("..(...)[1] + (...)[3] ..")" |) | |
− | print ( | + | print (MYSUM(1,2) * MYSUM(3,1)) |
</source> | </source> | ||
{|- | {|- | ||
| style="width: 50%; vertical-align:top;"| | | style="width: 50%; vertical-align:top;"| | ||
+ | |||
=== <translate>Methods</translate> === | === <translate>Methods</translate> === | ||
| style="width: 50%; vertical-align:top;"| | | style="width: 50%; vertical-align:top;"| |
Revision as of 21:27, 24 June 2020
Supported platforms:
Available since: Gideros 2017.10
Description
Macro Functions receive a list of tokens and output a string which will be pasted into code at compile time.
name @ (| ...body... |)
You should use parenthesis around markers - '|' is the preferred marker.
The same marker should be used to close macro body with closing parenthesis right after it.
You can use any of these markers:
\`~ ! # $ % ^ & * / + = |
You can redefine a macro with @@:
name @@ (| ...another_body... |)
To call macro function use its name with parenthesis as with usual functions:
name(...arguments...)
Examples
Enumeration
enum @ (|
local t = ...
local r = {}
for i = 1, #t, 2 do
table.insert(r, t[i] .. " @ " .. i // 2 + 1)
end
print(table.concat(r, " "))
return table.concat(r, " ")
|)
enum(apple, orange, melon)
print(apple, orange, melon) --> 1 2 3
Turning off the print command
print @ (| return "" |)
Unroll loops
dotimes @ (|
local times = table.remove(..., 1)
return (table.concat(..., " ").." "):rep(times)
|)
local t = {}
dotimes(10 print "Boom!")
A Sum macro example
-- comma counts as an argument meaning MYSUM(o1, o2) has three parameters
MYSUM @ (| return "("..(...)[1] + (...)[3] ..")" |)
print (MYSUM(1,2) * MYSUM(3,1))
Methods |
EventsConstants |