call

From Kolmafia
Jump to navigation Jump to search

Syntax: call [type] <identifier>( param, ... );

type is an optional parameter which must match the return value of the function. If not specified, type defaults to void.

For instance, the following ASH code:

 1 int foo( int a, int b ) {
 2    return a + b;
 3 }
 4 
 5 String a = "foo";
 6 float c = call float a( 2, 3 );
 7 print( "c = " + c );
 8 
 9 a = "print";
10 call a( "print 1" );
11 print( "done" );

will output the following to the CLI:

c = 5.0
print 1
done

Scope

call can only execute functions that are visible in the scope of the call statement.

For example, executing the following ASH code will result in an error, because the func_inside_bar() function is not visible from within foo():

 1 void foo( string callback ) {
 2    // foo() cannot see func_inside_bar()
 3    call void callback( 123 );
 4 }
 5 
 6 void bar() {
 7    void func_inside_bar( int arg ) {
 8       print( arg );
 9    }
10    foo( "func_inside_bar" );
11 }
12 
13 bar(); // Error: Function 'func_inside_bar( int )' undefined.

However, the following code will run successfully:

 1 void foo( string callback ) {
 2    void func_inside_foo( int arg ) {
 3       print( arg );
 4    }
 5    call void callback( 123 );
 6 }
 7 
 8 void bar() {
 9    // Although bar() cannot see func_inside_foo(),
10    // it can still pass its name to foo()
11    foo( "func_inside_foo" );
12 }
13 
14 bar(); // Prints "123"