Lambda
a lambda expression is an anonymous function that can contain either an expression or a sequence of statements.
a lambda looks like this
|[x,y,z] => [expression]
or like this
|[x,y,z] : [statement/statements]
an example of shown below
var MyLambdaObject = |[x,y] => x * y;//expression
var MyLambdaObject2 = |[x,y]:
var Tep = x * y;
ret Tep;
;//Starements
lambdas also have a short-form syntax. shown below
var MyLambdaObject = [x,y] => x * y;//expression
Lambda Capturing
Lambda will automatically Capture varables by value from the outer scope.
int a = 10;
int b = 10;
var LambdaObject = |[] => a * b;
//both a and b are captured by value.
a = 0;
var Value = LambdaObject();
//the Value will be 100 and not 0 because its captured by value on were it was declared.
Sometimes it is needed to capture by reference to do this you can explicitly say it captured by reference.
int a = 10;
int b = 10;
//b is captured by value
//a is captured reference.
var LambdaObject = |[][&a] => a * b;
a = 0;
var Value = LambdaObject();
//the Value will be 0 because its captured by reference.
also note you can put expressions in the capture list.
int a = 10;
int b = 10;
var LambdaObject = |[][&a] => a * b;
var LambdaObject2 = |[][int& a = a] => a * b;
//both mean the same thing.
int a = 10;//outer scope 'a'
int b = 10;
var LambdaObject2 = |[][int& a = a] => a * b;
^ this 'a' is for capture
var LambdaObject2 = |[][int& a = a] => a * b;
^ is referring to the outer scope.
Note it is not possible to explicitly assigned the captures varable in the short-form syntax.
[!IMPORTANT]
Explicitly assigned Lambda Capturing has no implementation on the compiler yet.
Lambda inside Lambdas is not tested yet.