Difference between revisions of "Function class"

From Catglobe Wiki
Jump to: navigation, search
(Created page with "'''Function : The function object'''   <span style="color:#a52a2a;">'''Constructors'''</span> *<span style="color:#000000;">'''(string functionName)''' - Create a ne...")
 
Line 1: Line 1:
'''Function&nbsp;: The function object'''
+
<p style="color:#000099; font-size:14px;"><strong>Function : The function object</strong></p>
  
&nbsp;
+
&nbsp;  
  
<span style="color:#a52a2a;">'''Constructors'''</span>
+
<span style="color:#a52a2a;">'''Constructors'''</span>  
  
*<span style="color:#000000;">'''(string functionName)''' - Create a new function that will reuse an existing function.</span>  
+
*<span style="color:#000000;">'''(string functionName)''' - Create a new function that will reuse an existing function.</span>
  
&nbsp;<span style="color:#a52a2a;">'''Methods'''</span>
+
&nbsp;<span style="color:#a52a2a;">'''Methods'''</span>  
  
 
*<span style="color:#000000;">'''AnyType Call(Params AnyType)''' - Evaluate a function with positional parameters.</span>  
 
*<span style="color:#000000;">'''AnyType Call(Params AnyType)''' - Evaluate a function with positional parameters.</span>  
 
*<span style="color:#000000;">'''AnyType Invoke(array parameter)''' - Evaluate a function with positional parameters.</span>  
 
*<span style="color:#000000;">'''AnyType Invoke(array parameter)''' - Evaluate a function with positional parameters.</span>  
 
*<span style="color:#000000;">'''AnyType Invoke(Dictionary parameter)''' - Evaluate a function with named parameters.</span>  
 
*<span style="color:#000000;">'''AnyType Invoke(Dictionary parameter)''' - Evaluate a function with named parameters.</span>  
*<span style="color:#000000;">'''string ToString()''' - The string representation of the object.</span>  
+
*<span style="color:#000000;">'''string ToString()''' - The string representation of the object.</span>
  
&nbsp;<span style="color:#a52a2a;">'''Properties'''</span>
+
&nbsp;<span style="color:#a52a2a;">'''Properties'''</span>  
  
 
*<span style="color:#000000;">'''string ObjectTypeName HasGetter'''&nbsp; - The name of the type of object.</span>  
 
*<span style="color:#000000;">'''string ObjectTypeName HasGetter'''&nbsp; - The name of the type of object.</span>  
*<span style="color:#000000;">'''TypeInformation TypeInformation HasGetter'''&nbsp; - Get information about this class.</span>  
+
*<span style="color:#000000;">'''TypeInformation TypeInformation HasGetter'''&nbsp; - Get information about this class.</span>
  
&nbsp;
+
&nbsp;  
  
<span style="color:#a52a2a;">'''Scoping of variables'''</span>
+
<span style="color:#a52a2a;">'''Scoping of variables'''</span>  
  
<span style="color:#a52a2a;">'''Ex1:'''</span>
+
<span style="color:#a52a2a;">'''Ex1:'''</span>  
  
function a = function ()
+
function a = function ()  
  
{
+
{  
  
&nbsp;&nbsp; number b = 1;
+
&nbsp;&nbsp; number b = 1;  
  
&nbsp;&nbsp; return true;
+
&nbsp;&nbsp; return true;  
  
};
+
};  
  
print(b);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#006400;">&nbsp; // Not work, get error: Undefined variable name: 'b'. @</span>
+
print(b);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#006400;">&nbsp; // Not work, get error: Undefined variable name: 'b'. @</span>  
  
<span style="color:#a52a2a;">'''Ex2:'''</span>
+
<span style="color:#a52a2a;">'''Ex2:'''</span>  
  
number i = 10;
+
number i = 10;  
  
function a = function () {
+
function a = function () {  
  
&nbsp; print(i);
+
&nbsp; print(i);  
  
&nbsp; print(b);
+
&nbsp; print(b);  
  
};
+
};  
  
number b = 20;
+
number b = 20;  
  
a.Call();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">&nbsp;// 10 20</span>
+
a.Call();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">&nbsp;// 10 20</span>  
  
<span style="color:#a52a2a;">'''Ex3:'''</span>
+
<span style="color:#a52a2a;">'''Ex3:'''</span>  
  
number i = 10;
+
number i = 10;  
  
function a = function () {
+
function a = function () {  
  
&nbsp; print(i);
+
&nbsp; print(i);  
  
&nbsp; print(b);
+
&nbsp; print(b);  
  
};
+
};  
  
a.Call();&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// Not work, get error: Undefined variable name: 'b'. @</span>
+
a.Call();&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// Not work, get error: Undefined variable name: 'b'. @</span>  
  
number b = 20;
+
number b = 20;  
  
<span style="color:#a52a2a;">'''Ex4:'''</span>
+
<span style="color:#a52a2a;">'''Ex4:'''</span>  
  
number i = 10;
+
number i = 10;  
  
function a = function (number i) {
+
function a = function (number i) {  
  
&nbsp; print(i);
+
&nbsp; print(i);  
  
};
+
};  
  
a.Call(100);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;">&nbsp; // 100</span>
+
a.Call(100);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;">&nbsp; // 100</span>  
  
print(i);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;"> // 10</span>
+
print(i);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;"> // 10</span>  
  
<span style="color:#a52a2a;">'''Ex5:'''</span>
+
<span style="color:#a52a2a;">'''Ex5:'''</span>  
  
number i = 10;
+
number i = 10;  
  
function a = function () {
+
function a = function () {  
  
&nbsp; number i = 100;
+
&nbsp; number i = 100;  
  
&nbsp; print(i);
+
&nbsp; print(i);  
  
};
+
};  
  
a.Call();&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;"> // Not work, get error:&nbsp; Illegal variable re-declaration @</span>
+
a.Call();&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;"> // Not work, get error:&nbsp; Illegal variable re-declaration @</span>  
  
&nbsp;
+
&nbsp;  
  
<span style="color:#a52a2a;">'''Recursion'''</span>
+
<span style="color:#a52a2a;">'''Recursion'''</span>  
  
<span style="color:#a52a2a;">'''Ex1:'''</span>
+
<span style="color:#a52a2a;">'''Ex1:'''</span>  
  
function a = function (number i)
+
function a = function (number i)  
  
{
+
{  
  
&nbsp;if (i == 0) return;
+
&nbsp;if (i == 0) return;  
  
&nbsp;a.Call(i - 1);
+
&nbsp;a.Call(i - 1);  
  
&nbsp;return i;
+
&nbsp;return i;  
  
};
+
};  
  
a.Call(49); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; <span style="color:#006400;">// Return 49</span>
+
a.Call(49); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; <span style="color:#006400;">// Return 49</span>  
  
<span style="color:#a52a2a;">'''Ex2:'''</span>
+
<span style="color:#a52a2a;">'''Ex2:'''</span>  
  
function a = function (number i)
+
function a = function (number i)  
  
{
+
{  
  
&nbsp;if (i == 0) return;
+
&nbsp;if (i == 0) return;  
  
&nbsp;a.Call(i - 1);
+
&nbsp;a.Call(i - 1);  
  
&nbsp;return i;
+
&nbsp;return i;  
  
};
+
};  
  
a.Call(50);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <span style="color:#006400;">// get error because the maximum limit of recursion is: '''49'''</span>
+
a.Call(50);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <span style="color:#006400;">// get error because the maximum limit of recursion is: '''49'''</span>  
  
&nbsp;
+
&nbsp;  
  
<span style="color:#a52a2a;">'''Examples'''</span>
+
<span style="color:#a52a2a;">'''Examples'''</span>  
  
function x = function (number a, number b, number c = 10)
+
function x = function (number a, number b, number c = 10)  
  
{
+
{  
  
&nbsp;&nbsp; number d = 1;
+
&nbsp;&nbsp; number d = 1;  
  
&nbsp;&nbsp; return a + b + c + d + p;
+
&nbsp;&nbsp; return a + b + c + d + p;  
  
};
+
};  
  
number p = 10;
+
number p = 10;  
  
&nbsp;
+
&nbsp;  
  
print(x.Call(1,2));
+
print(x.Call(1,2));  
  
print(x.Call(1,2,3));
+
print(x.Call(1,2,3));  
  
&nbsp;
+
&nbsp;  
  
function y = x;
+
function y = x;  
  
print(y.Call(1,2));
+
print(y.Call(1,2));  
  
print(y.Call(1,2,3));
+
print(y.Call(1,2,3));  
  
&nbsp;
+
&nbsp;  
  
function z = new Function("x");&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// remmember that new '''F'''unction("x") NOT new function("x")</span>
+
function z = new Function("x");&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// remmember that new '''F'''unction("x") NOT new function("x")</span>  
  
print(z.Call(1,2));
+
print(z.Call(1,2));  
  
print(z.Call(1,2,3));
+
print(z.Call(1,2,3));  
  
&nbsp;
+
&nbsp;  
  
function f;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// will be empty</span>
+
function f;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// will be empty</span>  
  
Function ff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;">//&nbsp; get error because there is no default constructor</span>
+
Function ff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;">//&nbsp; get error because there is no default constructor</span>  
  
&nbsp;
+
&nbsp;  
  
array paraArray_a = {1,2};
+
array paraArray_a = {1,2};  
  
array paraArray_b = {1,2,3};
+
array paraArray_b = {1,2,3};  
  
print(x.Invoke(paraArray_a));
+
print(x.Invoke(paraArray_a));  
  
print(x.Invoke(paraArray_b));
+
print(x.Invoke(paraArray_b));  
  
&nbsp;
+
&nbsp;  
  
Dictionary dic1 = {"a": 1,"b": 2};
+
Dictionary dic1 = {"a": 1,"b": 2};  
  
print(x.Invoke(dic1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// 24</span>
+
print(x.Invoke(dic1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// 24</span>  
  
&nbsp;
+
&nbsp;  
  
Dictionary dic2 = {"a": 1,"b": 2,"c": 3};
+
Dictionary dic2 = {"a": 1,"b": 2,"c": 3};  
  
print(x.Invoke(dic2));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// 17</span>
+
print(x.Invoke(dic2));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#006400;">// 17</span>  
  
&nbsp;
+
&nbsp;  
  
Dictionary dic3 = {"c": 3,"a": 1,"b": 2};
+
Dictionary dic3 = {"c": 3,"a": 1,"b": 2};  
  
print(x.Invoke(dic3));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;"> // 17</span>
+
print(x.Invoke(dic3));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#006400;"> // 17</span>  
  
&nbsp;
+
&nbsp;  
  
Dictionary dic = {"para_1": 1,"para_2": 2,"para_3": 3};
+
Dictionary dic = {"para_1": 1,"para_2": 2,"para_3": 3};  
  
print(x.Invoke(dic));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;<span style="color:#006400;">&nbsp; //&nbsp;&nbsp;&nbsp; will cause error because the keys in dictionary not the same as name of parameters which is defined in function x</span>
+
print(x.Invoke(dic));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;<span style="color:#006400;">&nbsp; //&nbsp;&nbsp;&nbsp; will cause error because the keys in dictionary not the same as name of parameters which is defined in function x</span>  
  
&nbsp;
+
&nbsp;  
  
<span style="color:#a52a2a;">'''Send function to Called Workflow'''</span>
+
<span style="color:#a52a2a;">'''Send function to Called Workflow'''</span>  
  
<span style="color:#a52a2a;">'''Ex1:'''</span>
+
<span style="color:#a52a2a;">'''Ex1:'''</span>  
  
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// IN FIRST WORKFLOW</span></span>
+
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// IN FIRST WORKFLOW</span></span>  
  
function x = function (number a, number b) {
+
function x = function (number a, number b) {  
  
return a + b;
+
return a + b;  
  
};
+
};  
  
Workflow_call(37248984, {x});
+
Workflow_call(37248984, {x});  
  
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">//&nbsp; IN SECOND (CALLED) WORKFLOW (Resource Id: 37248984)</span></span>
+
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">//&nbsp; IN SECOND (CALLED) WORKFLOW (Resource Id: 37248984)</span></span>  
  
array Workflow_parameters = Workflow_getParameters();
+
array Workflow_parameters = Workflow_getParameters();  
  
return Workflow_parameters[0].Call(1,2);
+
return Workflow_parameters[0].Call(1,2);  
  
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// ------get result: 3---------</span></span>
+
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// ------get result: 3---------</span></span>  
  
<span style="color:#a52a2a;">'''Ex2:'''</span>
+
<span style="color:#a52a2a;">'''Ex2:'''</span>  
  
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// IN FIRST WORKFLOW</span></span>
+
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// IN FIRST WORKFLOW</span></span>  
  
number i = 10;
+
number i = 10;  
  
function x = function (number a, number b) {
+
function x = function (number a, number b) {  
  
return a + b + i;
+
return a + b + i;  
  
};
+
};  
  
Workflow_call(37248984, {x});
+
Workflow_call(37248984, {x});  
  
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// IN SECOND (CALLED) WORKFLOW (Resource Id: 37248984)</span></span>
+
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// IN SECOND (CALLED) WORKFLOW (Resource Id: 37248984)</span></span>  
  
array Workflow_parameters = Workflow_getParameters();
+
array Workflow_parameters = Workflow_getParameters();  
  
return Workflow_parameters[0].Call(1,2);
+
return Workflow_parameters[0].Call(1,2);  
  
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// ------get result: 13---------</span></span>
+
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// ------get result: 13---------</span></span>  
  
&nbsp;
+
&nbsp;  
  
&nbsp;
+
&nbsp;  
  
 
[[Category:Data_Types_Literals_and_Variables]]
 
[[Category:Data_Types_Literals_and_Variables]]

Revision as of 04:53, 14 September 2011

Function : The function object

 

Constructors

  • (string functionName) - Create a new function that will reuse an existing function.

 Methods

  • AnyType Call(Params AnyType) - Evaluate a function with positional parameters.
  • AnyType Invoke(array parameter) - Evaluate a function with positional parameters.
  • AnyType Invoke(Dictionary parameter) - Evaluate a function with named parameters.
  • string ToString() - The string representation of the object.

 Properties

  • string ObjectTypeName HasGetter  - The name of the type of object.
  • TypeInformation TypeInformation HasGetter  - 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

 

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

 

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---------