stuncloud / UWSCR

UWSC互換スクリプト実行ツール
MIT License
50 stars 5 forks source link

スクリプトがパラメータ無しで起動された場合、PARAM_STR[ ]をアクセスするとエラーになる。 #189

Open DIYJii opened 2 months ago

DIYJii commented 2 months ago

概要

スクリプトで起動時のパラメータを調べようとすると、無入力の場合以下のエラーになる。

WSCR実行時エラー test.uws 1行目: Print PARAM_STR[x] [評価エラー] インデックスが範囲外です (x)

パラメータ入力無しの場合はDefault適用という書き方も有るので、エラーにしない方が良いと思います。 ちなみに、UWSCではエラーとはならず、 Empty/"" が返されます。

再現スクリプト

No response

再現手順

No response

回避方法

Para = Function(x) If x <= Length(PARAM_STR) -1 Then RESULT = PARAM_STR[x] Else RESULT = Empty FEND

Para(x)と書けばPARAM_STR[x]が取得出来ます。xが無入力パラメータを指す場合はEmptyが返ります。

備考

無名関数、なかなか良いじゃないですか! 最初は、普通の関数で書こうとしたのですが、PARAM_STRがPublicではないので直接アクセス出来ない事に気付き、ひょっとして無名関数ならOKかなと思ってトライしてみたら、そこら辺にあるLocal変数、何でも好きに出来るじゃないですか。普通の関数だと、引数渡しやPublic宣言やらで、アクセス出来るようにするのが面倒でしょうがなかったのが・・・これは良いわ! それに、わざわざリスト上遠く離れた所にある関数の中身を確かめに行かなくても、すぐそばに居るし。コンパクトに作れるし。 ここら辺の便利さは、今のマニュアルでは判らないので、もっと宣伝した方が良いですよ。

バージョン

1.0.1

不具合発生環境

No response

stuncloud commented 2 months ago

パラメータがないときのPARAM_STRインデックス呼び出しはUWSCでもエラーになっていた記憶があり、UWSCでPARAM_STRを使う場合は必ずlength(PARAM_STR)で有無を確認するようにしてたんですが今見るとEMPTYを返していますね…

PARAM_STRに限り範囲外ならEMPTYを返すようにします

対策

struct ParamStr(Vec<String>);
impl ParamStr {
    fn get(index: usize) -> Option<String> {
        todo!()
    }
}
DIYJii commented 2 months ago

超速の回答有難うございます。

On Fri, Jul 12, 2024 at 1:42 PM Joey Takahashi @.***> wrote:

パラメータがないときのPARAM_STRインデックス呼び出しはUWSCでもエラーになっていた記憶があり、UWSCでPARAM_STRを使う場合は必ず length(PARAM_STR)で有無を確認するようにしてたんですが今見るとEMPTYを返していますね…

PARAM_STRに限り範囲外ならEMPTYを返すようにします 対策

  • Object::ParamStr(ParamStr) を追加
  • ParamStrを新設

struct ParamStr(Vec);impl ParamStr { fn get(index: usize) -> Option { todo!() }}

  • call対応も考える

— Reply to this email directly, view it on GitHub https://github.com/stuncloud/UWSCR/issues/189#issuecomment-2224586628, or unsubscribe https://github.com/notifications/unsubscribe-auth/BH6AXYRQAPJ3UW47CUJJYQDZL5NDJAVCNFSM6AAAAABKYDWAYWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMRUGU4DMNRSHA . You are receiving this because you authored the thread.Message ID: @.***>