Toggle menu
876
3.8K
30.2K
279.1K
Catglobe Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Function class: Difference between revisions

From Catglobe Wiki
Tungocman (talk | contribs)
Created page with "'''Function : The function object'''   <span style="color:#a52a2a;">'''Constructors'''</span> *<span style="color:#000000;">'''(string functionName)''' - Create a ne..."
 
Tungocman (talk | contribs)
No edit summary
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 03: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---------