Haxe Code Cookbook
Haxe programming cookbookMacrosAdd parameters as fields

Add parameters as fields

Reading time: 1 minute

This macro function automatically assigns parameters of method to local variables.

 import haxe.macro.Context; import haxe.macro.Expr; using Lambda; class MyMacros {  macro static public function initLocals():Expr {  // Grab the variables accessible in the context the macro was called.  var locals = Context.getLocalVars();  var fields = Context.getLocalClass().get().fields.get();  var exprs:Array<Expr> = [];  for (local in locals.keys()) {  if (fields.exists(function(field) return field.name == local)) {  exprs.push(macro this.$local = $i{local});  } else {  throw new Error(Context.getLocalClass() + " has no field " + local, Context.currentPos());  }  }  // Generates a block expression from the given expression array   return macro $b{exprs};  } } 

Usage

 class Test {  public var name:String;  public var x:Float;  public var y:Float;    public function new(name:String, x:Float, y:Float) {  MyMacros.initLocals();  } } 

This will be the same as writing this manually:

 class Test {  public var name:String;  public var x:Float;  public var y:Float;  public function new(name:String, x:Float, y:Float) {  this.name = name;  this.x = x;  this.y = y;  } } 

Contributors:
Gama11
Last modified:
Created:
Category:  Macros