Difference between revisions of "Macro Functions"

From GiderosMobile
(formatting + added another example from @perrochon)
Line 64: Line 64:
 
'''A Sum macro example'''
 
'''A Sum macro example'''
 
<source lang="lua">
 
<source lang="lua">
-- comma counts as an argument meaning SUM(o1, o2) has three parameters
+
-- comma counts as an argument meaning MYSUM(o1, o2) has three parameters
SUM @ (| return "("..(...)[1] + (...)[3] ..")" |)
+
MYSUM @ (| return "("..(...)[1] + (...)[3] ..")" |)
print (SUM(1,2) * SUM(3,1))
+
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: Platform android.pngPlatform ios.pngPlatform mac.pngPlatform pc.png
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

Events

Constants