Difference between revisions of "Macro Functions"
From GiderosMobile
| Line 17: | Line 17: | ||
To call macro function use it's name with parenthesis as with usual functions:<br /> | To call macro function use it's name with parenthesis as with usual functions:<br /> | ||
name(...arguments...)<br /><br /> | name(...arguments...)<br /><br /> | ||
| + | === Examples === | ||
| + | '''Enumeration'''<br/> | ||
| + | <source lang="lua"><br /> | ||
| + | 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</source> | ||
| + | '''Turning off the print command'''<br/> | ||
| + | <source lang="lua"><br /> | ||
| + | print @ (| return "" |)</source> | ||
| + | '''Unroll loops'''<br/> | ||
| + | <source lang="lua"><br /> | ||
| + | dotimes @ (| | ||
| + | local times = table.remove(..., 1) | ||
| + | return (table.concat(..., " ").." "):rep(times) | ||
| + | |) | ||
| + | |||
| + | local t = {} | ||
| + | |||
| + | dotimes(10 print "Boom!")</source> | ||
{|- | {|- | ||
| style="width: 50%;"| | | style="width: 50%;"| | ||
Revision as of 11:45, 23 August 2018
Supported platforms: android, ios, mac, pc
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 it's name with parenthesis as with usual functions:
name(...arguments...)
Examples
Enumeration
<br />
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
<br />
print @ (| return "" |)
Unroll loops
<br />
dotimes @ (|
local times = table.remove(..., 1)
return (table.concat(..., " ").." "):rep(times)
|)
local t = {}
dotimes(10 print "Boom!")
Methods |
EventsConstants |