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
Dennis (talk | contribs)
No edit summary
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 2: Line 2:
|Name=<nowiki>Function</nowiki>
|Name=<nowiki>Function</nowiki>
|Description=<nowiki>The function object</nowiki>
|Description=<nowiki>The function object</nowiki>
|Constructors=
|InheritsFrom=object|Constructors=
{{CGscriptConstructors_Template|Parameters=
{{CGscriptConstructors_Template|Parameters=
{{CGscriptParameters_Template|Type=string|Name=<nowiki>functionName</nowiki>|Description=<nowiki>Name of the variable defined as a function</nowiki>}}
{{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>}}
|Description=<nowiki>Create a new function that will reuse an existing function</nowiki>}}
|Methods=
|Methods=
{{CGscriptMethods_Template|ReturnType=AnyType|Name=<nowiki>Call</nowiki>|Parameters={{CGscriptParameters_Template|Type=params AnyType|Name=params AnyType|Description=}}
{{CGscriptMethods_Template|ReturnType=object|Name=<nowiki>Call</nowiki>|Parameters={{CGscriptParameters_Template|Type=params AnyType|Name=params AnyType|Description=}}
|Description=<nowiki>Evaluate a function with positional parameters.</nowiki>}}
|Description=<nowiki>Evaluate a function with positional parameters.</nowiki>}}
{{CGscriptMethods_Template|ReturnType=AnyType|Name=<nowiki>Invoke</nowiki>|Parameters=
{{CGscriptMethods_Template|ReturnType=object|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>}}
{{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>}}
|Description=<nowiki>Evaluate a function with positional parameters.</nowiki>}}
{{CGscriptMethods_Template|ReturnType=AnyType|Name=<nowiki>Invoke</nowiki>|Parameters=
{{CGscriptMethods_Template|ReturnType=object|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>}}
{{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>}}
|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>}}
{{CGscriptMethods_Template|ReturnType=string|Name=<nowiki>ToString</nowiki>|Inherited=object|Description=<nowiki>The string representation of the object.</nowiki>}}
|Properties=
|Properties=
{{CGscriptProperties_Template|ReturnType=string|Name=<nowiki>ObjectTypeName</nowiki>|HasGetter=1|Description=<nowiki>The name of the type of object.</nowiki>}}
{{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>}}
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=<nowiki>TypeInformation</nowiki>|HasGetter=1|Inherited=object|Description=<nowiki>Get information about this class.</nowiki>}}
}}
}}


Line 25: Line 25:
<span style="color:#a52a2a;">'''Ex1:'''</span>  
<span style="color:#a52a2a;">'''Ex1:'''</span>  


<source lang="javascript">function a = function ()
<source lang="javascript">object a = function ()
{
{
   number b = 1;
   number b = 1;
Line 35: Line 35:


<source lang="javascript">number i = 10;
<source lang="javascript">number i = 10;
function a = function () {
object a = function () {
   print(i);
   print(i);
   print(b);
   print(b);
};
};
number b = 20;
number b = 20;
a.Call();          // 10 20</source>
a.Call();          // 10 20
Function f = new Function("a");  // Create a function f by using the constructor of this Function class
f.Call();          // 10 20
Function x =  a;
x.Call();          // 10 20
 
</source>


<span style="color: rgb(165, 42, 42);">'''Ex3:'''</span>  
<span style="color: rgb(165, 42, 42);">'''Ex3:'''</span>  


<source lang="javascript">number i = 10;
<source lang="javascript">number i = 10;
function a = function () {
object a = function () {
   print(i);
   print(i);
   print(b);
   print(b);
};
};
a.Call();              // Not work, get error: Undefined variable name: 'b'. @
a.Call();              // Not work, get error: Undefined variable name: 'b'. @
number b = 20;</source>  
number b = 20;
 
</source>  


<span style="color:#a52a2a;">'''Ex4:'''</span>  
<span style="color:#a52a2a;">'''Ex4:'''</span>  


<source lang="javascript">number i = 10;
<source lang="javascript">number i = 10;
function a = function (number i) {
object a = function (number i) {
   print(i);
   print(i);
};
};
a.Call(100);                    // 100
a.Call(100);                    // 100
print(i);                      // 10</source>  
print(i);                      // 10
Function f = new Function("a"); // Create a function f by using the constructor of this Function class
f.Call(100);                    // 100
print(i);                      // 10
 
</source>  


<span style="color:#a52a2a;">'''Ex5:'''</span>  
<span style="color:#a52a2a;">'''Ex5:'''</span>  


<source lang="javascript">number i = 10;
<source lang="javascript">number i = 10;
function a = function () {
object a = function () {
   number i = 100;
   number i = 100;
   print(i);
   print(i);
Line 76: Line 89:
<span style="color:#a52a2a;">'''Ex1:'''</span>  
<span style="color:#a52a2a;">'''Ex1:'''</span>  


<source lang="javascript">function a = function (number i)
<source lang="javascript">object a = function (number i)
{
{
  if (i == 0) return;
  if (i == 0) return;
Line 82: Line 95:
  return i;
  return i;
};
};
a.Call(49);            // Return 49</source>  
a.Call(49);            // Return 49
Function f = new Function("a"); // Create a function f by using the constructor of this Function class
f.Call(49);            // Return 49
</source>


<span style="color:#a52a2a;">'''Ex2:'''</span>  
<span style="color:#a52a2a;">'''Ex2:'''</span>  


<source lang="javascript">function a = function (number i){
<source lang="javascript">object a = function (number i){
  if (i == 0) return;
  if (i == 0) return;
  a.Call(i - 1);
  a.Call(i - 1);
Line 100: Line 116:


<source lang="javascript">// IN FIRST WORKFLOW
<source lang="javascript">// IN FIRST WORKFLOW
function x = function (number a, number b) {
object x = function (number a, number b) {
return a + b;
return a + b;
};
};
Line 112: Line 128:
<source lang="javascript">// IN FIRST WORKFLOW
<source lang="javascript">// IN FIRST WORKFLOW
number i = 10;
number i = 10;
function x = function (number a, number b) {
object x = function (number a, number b) {
return a + b + i;
return a + b + i;
};
};
Line 126: Line 142:
==== <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)
<source lang="javascript">object x = function (number a, number b, number c = 10)
{
{
   number d = 1;
   number d = 1;
Line 136: Line 152:
print(x.Call(1,2,3));
print(x.Call(1,2,3));


function y = x;
object y = x;
print(y.Call(1,2));
print(y.Call(1,2));
print(y.Call(1,2,3));
print(y.Call(1,2,3));
   
   
function z = new Function("x");        // remmember that new Function("x") NOT new function("x")
object z = new Function("x");        // remmember that new Function("x") NOT new function("x")
print(z.Call(1,2));
print(z.Call(1,2));
print(z.Call(1,2,3));
print(z.Call(1,2,3));


function f;                            // will be empty
object f;                            // will be empty
Function ff;                            //  get error because there is no default constructor
object ff;                            //  get error because there is no default constructor


array paraArray_a = {1,2};
array paraArray_a = {1,2};
Line 162: Line 178:


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));            //  will cause error because the keys in dictionary not the same as name of parameters which is defined in function x</source><br>  
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>
 
[[Category:Data_Types_Literals_and_Variables]]

Latest revision as of 06:48, 2 July 2020

Function



The function object

Parent class

Inherits from object

Constructors

  • (string functionName "Name of the variable defined as a function") - Create a new function that will reuse an existing function

Methods

  • object Call(params AnyType) - Evaluate a function with positional parameters.
  • object Invoke(array param "The parameters given to the function mapped to the position used in the definition") - Evaluate a function with positional parameters.
  • object Invoke(Dictionary param "The parameters given to the function mapped to the names used in the definition") - Evaluate a function with named parameters.
  • (From object) string ToString() - The string representation of the object.

Properties

  • string ObjectTypeName { get; } - The name of the type of object.
  • (From object) TypeInformation TypeInformation { get; } - Get information about this class.


Scoping of variables

Ex1:

object a = function ()
{
   number b = 1;
   return true;
};
print(b);             // Not work, get error: Undefined variable name: 'b'. @

Ex2:

number i = 10;
object a = function () {
  print(i);
  print(b);
};
number b = 20;
a.Call();          // 10 20
Function f = new Function("a");   // Create a function f by using the constructor of this Function class
f.Call();          // 10 20
Function x =  a;
x.Call();          // 10 20

Ex3:

number i = 10;
object a = function () {
  print(i);
  print(b);
};
a.Call();              // Not work, get error: Undefined variable name: 'b'. @
number b = 20;

Ex4:

number i = 10;
object a = function (number i) {
  print(i);
};
a.Call(100);                    // 100
print(i);                       // 10
Function f = new Function("a"); // Create a function f by using the constructor of this Function class
f.Call(100);                    // 100
print(i);                       // 10

Ex5:

number i = 10;
object a = function () {
  number i = 100;
  print(i);
};
a.Call();        // Not work, get error:  Illegal variable re-declaration @

 


Recursion

Ex1:

object a = function (number i)
{
 if (i == 0) return;
 a.Call(i - 1);
 return i;
};
a.Call(49);            // Return 49
Function f = new Function("a"); // Create a function f by using the constructor of this Function class
f.Call(49);            // Return 49

Ex2:

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

object 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));

object y = x;
print(y.Call(1,2));
print(y.Call(1,2,3));
 
object z = new Function("x");         // remmember that new Function("x") NOT new function("x")
print(z.Call(1,2));
print(z.Call(1,2,3));

object f;                             // will be empty
object 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