Defining macros
In Crystal, a macro has two meanings. Generally, it refers to any code that runs or expands at compile time. However, more specifically, it can refer to a type of method that accepts AST nodes at compile time, whose body is pasted into the program at the point the macro is used. An example of the latter is the property
macro, which you saw in previous chapters, which is an easy way to define both a getter and a setter method for a given instance variable:
class Example property age : Int32 def initialize(@age : Int32); end end
The preceding code is equivalent to the following:
class Example @age : Int32 def initialize(@age : Int32); end def age : Int32 @age end def age=(@age : Int32) end end
As we mentioned earlier, macros accept AST nodes at compile time and output Crystal code that is added to the program as if it was...