5.11 Local functions

Haxe supports first-class functions and allows declaring local functions in expressions. The syntax follows class field methods:

class Main {
  static public function main() {
    var value = 1;
    function myLocalFunction(i) {
      return value + i;
    trace(myLocalFunction(2)); // 3

We declare myLocalFunction inside the block expression of the main class field. It takes one argument i and adds it to value, which is defined in the outside scope.

The scoping is equivalent to that of variables and for the most part writing a named local function can be considered equal to assigning an unnamed local function to a local variable:

var myLocalFunction = function(a) { }

However, there are some differences related to type parameters and the position of the function. We speak of a "lvalue" function if it is not assigned to anything upon its declaration, and an "rvalue" function otherwise.

  • Lvalue functions require a name and can have type parameters.
  • Rvalue functions may have a name, but cannot have type parameters.