Difference between revisions of "Function class"

From Catglobe Wiki
Jump to: navigation, search
Line 1: Line 1:
<p style="color:#000099; font-size:14px;"><strong>Function : The function object</strong></p>
+
=== '''Function&nbsp;: The function object''' ===
  
 
&nbsp;  
 
&nbsp;  
Line 21: Line 21:
 
&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>  
 +
<source lang="javascript">function a = function ()
 +
{
 +
  number b = 1;
 +
  return true;
 +
};
 +
print(b);            // Not work, get error: Undefined variable name: 'b'. @</source>
  
function a = function ()
 
 
{
 
 
&nbsp;&nbsp; number b = 1;
 
 
&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>
 
  
 
<span style="color:#a52a2a;">'''Ex2:'''</span>  
 
<span style="color:#a52a2a;">'''Ex2:'''</span>  
  
number i = 10;  
+
<source lang="javascript">number i = 10;
 +
function a = function () {
 +
  print(i);
 +
  print(b);
 +
};
 +
number b = 20;
 +
a.Call();          // 10 20</source><span style="color:#a52a2a;"</span><br>
  
function a = function () {
+
<span style="color: rgb(165, 42, 42);">'''Ex3:'''</span>
  
&nbsp; print(i);
 
  
&nbsp; print(b);  
+
<source lang="javascript">number i = 10;
 +
function a = function () {
 +
  print(i);
 +
  print(b);
 +
};
 +
a.Call();              // Not work, get error: Undefined variable name: 'b'. @
 +
number b = 20;</source>
  
};
 
 
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>
 
 
<span style="color:#a52a2a;">'''Ex3:'''</span>
 
 
number i = 10;
 
 
function a = function () {
 
 
&nbsp; print(i);
 
 
&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>
 
 
number b = 20;
 
  
 
<span style="color:#a52a2a;">'''Ex4:'''</span>  
 
<span style="color:#a52a2a;">'''Ex4:'''</span>  
 +
<source lang="javascript">number i = 10;
 +
function a = function (number i) {
 +
  print(i);
 +
};
 +
a.Call(100);                    // 100
 +
print(i);                      // 10</source>
  
number i = 10;
 
 
function a = function (number 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>
 
 
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>  
 +
<source lang="javascript">number i = 10;
 +
function a = function () {
 +
  number i = 100;
 +
  print(i);
 +
};
 +
a.Call();        // Not work, get error:  Illegal variable re-declaration @</source>
 +
&nbsp;
  
number i = 10;
+
<span style="color: rgb(165, 42, 42);"</span><br>
 
 
function a = function () {
 
 
 
&nbsp; number i = 100;
 
 
 
&nbsp; print(i);  
 
  
};
+
==== <span style="color:#a52a2a;">'''Recursion'''</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;
 
 
 
<span style="color:#a52a2a;">'''Recursion'''</span>  
 
  
 
<span style="color:#a52a2a;">'''Ex1:'''</span>  
 
<span style="color:#a52a2a;">'''Ex1:'''</span>  
 +
<source lang="javascript">function a = function (number i)
 +
{
 +
if (i == 0) return;
 +
a.Call(i - 1);
 +
return i;
 +
};
 +
a.Call(49);            // Return 49</source>
  
function a = function (number i)
 
 
{
 
 
&nbsp;if (i == 0) return;
 
 
&nbsp;a.Call(i - 1);
 
 
&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>
 
  
 
<span style="color:#a52a2a;">'''Ex2:'''</span>  
 
<span style="color:#a52a2a;">'''Ex2:'''</span>  
 +
<source lang="">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</source>
  
function a = function (number i)
 
 
{
 
 
&nbsp;if (i == 0) return;
 
 
&nbsp;a.Call(i - 1);
 
 
&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>
 
  
 
&nbsp;  
 
&nbsp;  
  
<span style="color:#a52a2a;">'''Examples'''</span>  
+
==== <span style="color:#a52a2a;">'''Examples'''</span> ====
 
+
<source lang="javascript">function x = function (number a, number b, number c = 10)
function x = function (number a, number b, number c = 10)  
+
{
 
+
  number d = 1;
{  
+
  return a + b + c + d + p;
 
+
};
&nbsp;&nbsp; number d = 1;  
+
number p = 10;
 
+
&nbsp;&nbsp; return a + b + c + d + p;  
+
print(x.Call(1,2));
 
+
print(x.Call(1,2,3));
};  
 
 
 
number p = 10;  
 
 
 
&nbsp;  
 
  
print(x.Call(1,2));  
+
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));
  
print(x.Call(1,2,3));  
+
function f;                             // will be empty
 +
Function ff;                            //  get error because there is no default constructor
  
&nbsp;  
+
array paraArray_a = {1,2};
 +
array paraArray_b = {1,2,3};
 +
print(x.Invoke(paraArray_a));
 +
print(x.Invoke(paraArray_b));</source>
  
function y = x;
 
  
print(y.Call(1,2));  
+
<source lang="javascript">Dictionary dic1 = {"a": 1,"b": 2};
 +
print(x.Invoke(dic1));                                    // 24
 +
 +
Dictionary dic2 = {"a": 1,"b": 2,"c": 3};
 +
print(x.Invoke(dic2));                                     // 17
  
print(y.Call(1,2,3));  
+
Dictionary dic3 = {"c": 3,"a": 1,"b": 2};
 +
print(x.Invoke(dic3));                                     // 17
  
&nbsp;  
+
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</source><br>
  
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,3));
+
==== <span style="color:#a52a2a;">'''Send function to Called Workflow'''</span> ====
 
 
&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 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;
 
 
 
array paraArray_a = {1,2};
 
 
 
array paraArray_b = {1,2,3};
 
 
 
print(x.Invoke(paraArray_a));
 
 
 
print(x.Invoke(paraArray_b));
 
 
 
&nbsp;
 
 
 
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>
 
 
 
&nbsp;
 
 
 
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>
 
 
 
&nbsp;
 
 
 
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>
 
 
 
&nbsp;
 
 
 
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>
 
 
 
&nbsp;
 
 
 
<span style="color:#a52a2a;">'''Send function to Called Workflow'''</span>  
 
  
 
<span style="color:#a52a2a;">'''Ex1:'''</span>  
 
<span style="color:#a52a2a;">'''Ex1:'''</span>  
 +
<source lang="javascript">// IN FIRST WORKFLOW
 +
function x = function (number a, number b) {
 +
return a + b;
 +
};
 +
Workflow_call(37248984, {x});
  
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// IN FIRST WORKFLOW</span></span>
+
// IN SECOND (CALLED) WORKFLOW (Resource Id: 37248984)
 
+
array Workflow_parameters = Workflow_getParameters();
function x = function (number a, number b) {
+
return Workflow_parameters[0].Call(1,2);
 
+
// ------get result: 3---------</source><br>
return a + b;
 
 
 
};
 
 
 
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>
 
 
 
array Workflow_parameters = Workflow_getParameters();  
 
 
 
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="color:#a52a2a;">'''Ex2:'''</span>  
 
<span style="color:#a52a2a;">'''Ex2:'''</span>  
 +
<source lang="javascript">// IN FIRST WORKFLOW
 +
number i = 10;
 +
function x = function (number a, number b) {
 +
return a + b + i;
 +
};
 +
Workflow_call(37248984, {x});
  
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// IN FIRST WORKFLOW</span></span>
+
// IN SECOND (CALLED) WORKFLOW (Resource Id: 37248984)
 
+
array Workflow_parameters = Workflow_getParameters();
number i = 10;
+
return Workflow_parameters[0].Call(1,2);
 
+
// ------get result: 13---------</source><br>
function x = function (number a, number b) {
 
 
 
return a + b + i;
 
 
 
};
 
 
 
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>
 
 
 
array Workflow_parameters = Workflow_getParameters();  
 
 
 
return Workflow_parameters[0].Call(1,2);  
 
 
 
<span style="font-size:10px;"><span style="color: rgb(0, 100, 0);">// ------get result: 13---------</span></span>  
 
 
 
 
&nbsp;  
 
&nbsp;  
  

Revision as of 10:03, 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

<span style="color:#a52a2a;"

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 @

 

<span style="color: rgb(165, 42, 42);"

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