Call: Difference between revisions
Jump to navigation
Jump to search
imported>Bale http://kolmafia.us/showthread.php?1349-Can-I-sort-an-array-Can-I-call-a-method-if-given-a-reference&p=9021&viewfull=1#post9021 |
Highlight the callbacks themselves, which should make the explanation more intuitive |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
{{DISPLAYTITLE:call}} | {{DISPLAYTITLE:call}} | ||
Syntax: call [''type''] <identifier>( param, ... ); | Syntax: <code>call [''type''] <identifier>( param, ... );</code> | ||
: ''type'' is an optional parameter which must match the return value of the function. If not specified, ''type'' defaults to void. | : ''type'' is an optional parameter which must match the return value of the function. If not specified, ''type'' defaults to void. | ||
For instance: | For instance, the following ASH code: | ||
< | |||
int foo( int a, int b ) | <syntaxhighlight lang="d" line highlight="6,10"> | ||
{ | int foo( int a, int b ) { | ||
return a + b; | |||
} | } | ||
String a = "foo"; | String a = "foo"; | ||
float c = call float a( 2, 3 ); | float c = call float a( 2, 3 ); | ||
print( "c = " + c ); | print( "c = " + c ); | ||
a = "print"; | a = "print"; | ||
call a( "print 1" ); | call a( "print 1" ); | ||
print( "done" ); | |||
</syntaxhighlight> | |||
will output the following to the CLI: | will output the following to the CLI: | ||
<pre> | |||
c = 5.0 | |||
{{ | print 1 | ||
done | |||
</pre> | |||
== Scope == | |||
<code>call</code> can only execute functions that are ''visible in the scope of the <code>call</code> statement''. | |||
For example, executing the following ASH code will result in an error, because the <code>func_inside_bar()</code> function is not visible from within <code>foo()</code>: | |||
<syntaxhighlight lang="d" line highlight="7-9"> | |||
void foo( string callback ) { | |||
// foo() cannot see func_inside_bar() | |||
call void callback( 123 ); | |||
} | |||
void bar() { | |||
void func_inside_bar( int arg ) { | |||
print( arg ); | |||
} | |||
foo( "func_inside_bar" ); | |||
} | |||
bar(); // Error: Function 'func_inside_bar( int )' undefined. | |||
</syntaxhighlight> | |||
However, the following code will run successfully: | |||
<syntaxhighlight lang="d" line highlight="2-4"> | |||
void foo( string callback ) { | |||
void func_inside_foo( int arg ) { | |||
print( arg ); | |||
} | |||
call void callback( 123 ); | |||
} | |||
void bar() { | |||
// Although bar() cannot see func_inside_foo(), | |||
// it can still pass its name to foo() | |||
foo( "func_inside_foo" ); | |||
} | |||
bar(); // Prints "123" | |||
</syntaxhighlight> | |||
[[Category:Scripting]] | [[Category:Scripting]] |
Latest revision as of 06:52, 23 February 2021
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:
int foo( int a, int b ) {
return a + b;
}
String a = "foo";
float c = call float a( 2, 3 );
print( "c = " + c );
a = "print";
call a( "print 1" );
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()
:
void foo( string callback ) {
// foo() cannot see func_inside_bar()
call void callback( 123 );
}
void bar() {
void func_inside_bar( int arg ) {
print( arg );
}
foo( "func_inside_bar" );
}
bar(); // Error: Function 'func_inside_bar( int )' undefined.
However, the following code will run successfully:
void foo( string callback ) {
void func_inside_foo( int arg ) {
print( arg );
}
call void callback( 123 );
}
void bar() {
// Although bar() cannot see func_inside_foo(),
// it can still pass its name to foo()
foo( "func_inside_foo" );
}
bar(); // Prints "123"