Function class: Difference between revisions
From Catglobe Wiki
More actions
No edit summary  | 
				No edit summary  | 
				||
| Line 1: | Line 1: | ||
==  | {{CGscriptClass_Template  | ||
|Name=<nowiki>Function</nowiki>  | |||
|Description=<nowiki>The function object</nowiki>  | |||
|Constructors=  | |||
{{CGscriptConstructors_Template|Parameters=  | |||
{{CGscriptParameters_Template|Type=string|Name=<nowiki>functionName</nowiki>|Description=<nowiki>Name of the variable defined as a function</nowiki>}}  | |||
|Description=<nowiki>Create a new function that will reuse an existing function</nowiki>}}  | |||
|Methods=  | |||
=  | {{CGscriptMethods_Template|ReturnType=AnyType|Name=<nowiki>Call</nowiki>|Parameters={{CGscriptParameters_Template|Type=params AnyType|Name=params AnyType|Description=}}  | ||
|Description=<nowiki>Evaluate a function with positional parameters.</nowiki>}}  | |||
{{CGscriptMethods_Template|ReturnType=AnyType|Name=<nowiki>Invoke</nowiki>|Parameters=  | |||
{{CGscriptParameters_Template|Type=array|Name=<nowiki>param</nowiki>|Description=<nowiki>The parameters given to the function mapped to the position used in the definition</nowiki>}}  | |||
|Description=<nowiki>Evaluate a function with positional parameters.</nowiki>}}  | |||
{{CGscriptMethods_Template|ReturnType=AnyType|Name=<nowiki>Invoke</nowiki>|Parameters=  | |||
{{CGscriptParameters_Template|Type=Dictionary|Name=<nowiki>param</nowiki>|Description=<nowiki>The parameters given to the function mapped to the names used in the definition</nowiki>}}  | |||
=  | |Description=<nowiki>Evaluate a function with named parameters.</nowiki>}}  | ||
{{CGscriptMethods_Template|ReturnType=string|Name=<nowiki>ToString</nowiki>|Description=<nowiki>The string representation of the object.</nowiki>}}  | |||
|Properties=  | |||
{{CGscriptProperties_Template|ReturnType=string|Name=<nowiki>ObjectTypeName</nowiki>|HasGetter=1|Description=<nowiki>The name of the type of object.</nowiki>}}  | |||
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=<nowiki>TypeInformation</nowiki>|HasGetter=1|Description=<nowiki>Get information about this class.</nowiki>}}  | |||
}}  | |||
==== <span style="color:#a52a2a;">'''Scoping of variables'''</span>  ====  | ==== <span style="color:#a52a2a;">'''Scoping of variables'''</span>  ====  | ||
Revision as of 08:40, 22 September 2011
Function
The function object
Constructors
- (string functionName "Name of the variable defined as a function") - Create a new function that will reuse an existing function
 
Methods
- AnyType Call(params AnyType) - Evaluate a function with positional parameters.
 - AnyType Invoke(array param "The parameters given to the function mapped to the position used in the definition") - Evaluate a function with positional parameters.
 - AnyType Invoke(Dictionary param "The parameters given to the function mapped to the names used in the definition") - Evaluate a function with named parameters.
 - string ToString() - The string representation of the object.
 
Properties
- string ObjectTypeName { get;  } - The name of the type of object.
 - TypeInformation TypeInformation { get;  } - Get information about this class.
 
Scoping of variables
Ex1:
function a = function ()
{
   number b = 1;
   return true;
};
print(b);             // Not work, get error: Undefined variable name: 'b'. @
Ex2:
number i = 10;
function a = function () {
  print(i);
  print(b);
};
number b = 20;
a.Call();          // 10 20
Ex3:
number i = 10;
function a = function () {
  print(i);
  print(b);
};
a.Call();              // Not work, get error: Undefined variable name: 'b'. @
number b = 20;
Ex4:
number i = 10;
function a = function (number i) {
  print(i);
};
a.Call(100);                    // 100
print(i);                       // 10
Ex5:
number i = 10;
function a = function () {
  number i = 100;
  print(i);
};
a.Call();        // Not work, get error:  Illegal variable re-declaration @
Recursion
Ex1:
function a = function (number i)
{
 if (i == 0) return;
 a.Call(i - 1);
 return i;
};
a.Call(49);            // Return 49
Ex2:
function a = function (number i){
 if (i == 0) return;
 a.Call(i - 1);
 return i;
};
a.Call(50);           // get error because the maximum limit of recursion is: 49
 
Send function to Called Workflow
Ex1:
// IN FIRST WORKFLOW
function x = function (number a, number b) {
return a + b;
};
Workflow_call(37248984, {x});
//  IN SECOND (CALLED) WORKFLOW (Resource Id: 37248984)
array Workflow_parameters = Workflow_getParameters();
return Workflow_parameters[0].Call(1,2);
// ------get result: 3---------
 Ex2: 
// IN FIRST WORKFLOW
number i = 10;
function x = function (number a, number b) {
return a + b + i;
};
Workflow_call(37248984, {x});
// IN SECOND (CALLED) WORKFLOW (Resource Id: 37248984)
array Workflow_parameters = Workflow_getParameters();
return Workflow_parameters[0].Call(1,2);
// ------get result: 13---------
 
Examples
function x = function (number a, number b, number c = 10)
{
   number d = 1;
   return a + b + c + d + p;
};
number p = 10;
 
print(x.Call(1,2));
print(x.Call(1,2,3));
function y = x;
print(y.Call(1,2));
print(y.Call(1,2,3));
 
function z = new Function("x");         // remmember that new Function("x") NOT new function("x")
print(z.Call(1,2));
print(z.Call(1,2,3));
function f;                             // will be empty
Function ff;                            //  get error because there is no default constructor
array paraArray_a = {1,2};
array paraArray_b = {1,2,3};
print(x.Invoke(paraArray_a));
print(x.Invoke(paraArray_b));
 
Dictionary dic1 = {"a": 1,"b": 2};
print(x.Invoke(dic1));                                     // 24
 
Dictionary dic2 = {"a": 1,"b": 2,"c": 3};
print(x.Invoke(dic2));                                     // 17
Dictionary dic3 = {"c": 3,"a": 1,"b": 2};
print(x.Invoke(dic3));                                     // 17
Dictionary dic = {"para_1": 1,"para_2": 2,"para_3": 3};
print(x.Invoke(dic));            //  will cause error because the keys in dictionary not the same as name of parameters which is defined in function x