関数 †関数とはなんぞや。 (関数名、引数1、引数2、....) 関数名が使いたい機能、引数が処理して欲しいもの...という感じ。 関連ページ †
引数区切りについて †一般的な関数の書式では、 (関数名[,引数1,引数2,…引数n]) のように記述しますが、この関数名や引数をそれぞれ区切る文字を「引数区切り文字」と呼びます。 引数の文字列に区切り文字と同じ記号が含まれていれば、区切り文字として機能します。 #────区切り文字がさくらスクリプトでも使われていると意図通りの動作をしない (関数名,hoge,\q[ほげ,メメタァ]) #────区切り文字を半角コンマ以外に書き換える (関数名、hoge、\q[ほげ,メメタァ]) (関数名、hoge、\q[ほげ,メメタァ]) (関数名,hoge,\q[ほげ,メメタァ]) これで半角カンマをただの文字列として動作させられます。 引数区切り文字問題 †例:(R0)の中に半角カンマが含まれエラーが出る場合 (split,(R0),(バイト値,1)) 引数区切り文字を"、"に替えるとエラーを防げる (split、(R0)、(バイト値,1)) 引数の中に全ての区切り文字が含まれる可能性がある場合は一時的に引数内に含まれない文字を引数区切りとして設定する事でこの問題を回避します。参考:引数区切り追加・削除 例えばファイル名にはカンマ類の文字は全て含まれる可能性があります、ファイル名リストをバイト値1区切りで渡された場合に、ファイル名をsplit関数で分割しようとする場合は引数区切り文字を新たに定義して対処します。参考:split関数 例 $引数区切り追加【タブ】(バイト値,2) (split(バイト値,2)(R0)(バイト値,2)(バイト値,1)) $引数区切り削除【タブ】(バイト値,2) 例2 上の例は非常に可読性が悪いので対策 $,【タブ】(バイト値,2) $引数区切り追加【タブ】(,) (split(,)(R0)(,)(バイト値,1)) $引数区切り削除【タブ】(,) when,times,while,forでバイト値を引数区切り文字にする場合の注意 †参考:ばぐとら研究所統合ToDo 原因 †里々は普通、かっこ()が入れ子になっている場合、内側のかっこから順に展開していきますが、if関数のように内側の処理系が先に実行されると逆に不都合のあるケースもあり、この対策にwhen,times,while,for関数は、内部のかっこの展開を遅延させる為の特別な処理をしています。 対応策 †要は直接「バイト値」を書けば問題はありません。 (b1) 透明なので見た目では分かりませんが、(b1)[タブ文字][1バイト文字]と書かれています。即ち、(b1)を1バイト文字に置換するという簡単な動作です。
選択肢(_、\q[])を含むスクリプトを関数の引数とする場合の注意 †OnTranslateでトーク全文に対して置換などの処理を行いたい場合など、トーク全文を関数の引数として渡すケースがあると思います。 そのような場合、里々の選択肢記法「_」や、さくらスクリプトの\q[...]タグがトーク中に存在していると、トーク中に必ずバイト値1が含まれることになります。従って、関数の区切り字には「、」や「,」だけでなく、バイト値1も使用できません。 |