https://emily.shillest.net/ayaya/index.php?マニュアル/基本/関数
関数名は全角文字も使えます。
また、変数の定義はローカル、グローバル問わず関数内でしかできないことに注意してください。
Test{ "Hello World!" }
このTest関数は文字列"Hello World!"を出力します。 YAYAの特徴として、代入式でないただの変数や文字列(この例における"Hello World!")が存在すると、それが返り値として扱われます。
つまり
Test{ _A = 10 _B = 11+32 "Hello World!" }
としても、返り値は"Hello World!"となります。 また、
Test{ A = 10 "Hello World!" "Hallo Welt!" 10 11+32 }
のように返り値の候補が複数存在すると、それらのうちいずれかがランダムで選ばれます(この例では"Hello World!", "Hallo Welt!", 10, 43)。
また、中括弧は
Test { "Hello World!" "Hallo Welt!" }
のように書いても構いません。
関数には引数を与えることができます。このとき受け取った引数はローカル変数の配列_argvに書格納され、_argcに引数の数(_argvのサイズ)が格納されます。
例えば
てすと{ "入力は「"+_argv[0]+"」だよ" }
という関数を定義し、
てすと("うかがか")
のように実行すると、"入力は「うかがか」だよ"が出力されます。
ローカル変数 _FUNC_NAME_ には現在実行中の関数名が入ります。
各種の動的定義命令(APPEND_RUNTIME_DICなど)の拡充に伴い、利便性のために追加されました。
関数内では自由に変数を宣言することができます。このとき変数名が"_"からはじまるものはローカル、そうでないものはグローバル変数として扱われます。
その変数が定義された中括弧内でしか使えない変数です。
関数が実行されて一度定義されてしまうと、どこでも使える変数になります。
なお、グローバル変数はゴーストを終了しても保持されます。消去したい場合はERASEVAR関数を使う必要があります。
テスト2{ _aa = 200//これはローカル bb = 200//これはグローバル }
その関数内でしか使わない変数などは、なるべくローカル変数を使うようにしたほうがバグが出にくくなります。たとえばループ処理のラベルなどでは
テスト2{ for _i = 0; _i <10; _i++{ _i+"\n" } }
のようにローカル変数(_i)を使ってください。
基礎設定ファイルのfncdepth で関数の呼び出し深さ(回数ではない)の設定ができます。標準は32階層です。
制限に到達した時は shiori.OnCallLimit(関数名,行) が呼ばれます。
実行中にメモリを使い果たした時は shiori.OnMemoryLimit() が呼ばれますが、スタックオーバーフローを捉えることはできません。
Last modified on: 2021-11-23 (Tuesday) 15:59:55
|