4D-JUG
Would you like to react to this message? Create an account in a few clicks or log in to continue.

【小技】Chooseとコンパイラーの型指定

Go down

【小技】Chooseとコンパイラーの型指定 Empty 【小技】Chooseとコンパイラーの型指定

投稿 by miyako 2016-07-21, 10:33 am

Chooseは,返り値の型が決まっていない,珍しい関数です。

http://doc.4d.com/4Dv15/4D/15.1/Choose.301-2684929.ja.html

そのような関数は,OB Get,JSON Parse,WA Evaluate JavaScript など,ごく少数しか存在しません。

http://doc.4d.com/4Dv15/4D/15.1/OB-Get.301-2686003.ja.html
http://doc.4d.com/4Dv15/4D/15.1/JSON-Parse.301-2686301.ja.html
http://doc.4d.com/4Dv15/4D/15.1/WA-Evaluate-JavaScript.301-2685017.ja.html

一方,入力パラメーターの型が決まっていなかったり,省略できたりするコマンドは,結構,たくさん存在します。

返り値の型が決まっていない関数をそのままコマンドの引数にした場合,コンパイラーがうまく意図を汲み取ってくれないことがあります。

たとえば,下記のコードは,第1引数のテーブルを省略している例ですが,Chooseの返り値が不明であるため,第2引数の数値(ウインドウタイプ)を文字列(フォーム名)に変換しようとしている,というエラーになってしまいます。

Code:
C_LONGINT($Window_Type_L;$Window_Ref_L)
$Window_Ref_L:=Open form window(Choose(true ;"value1";"value2");$Window_Type_L)

そのような時は,Stringを使用し,明示的に型が文字列であることを示すことでコンパイルエラーを避けることができます。

Code:
C_LONGINT($Window_Type_L;$Window_Ref_L)
$Window_Ref_L:=Open form window(String(Choose(True;"value1";"value2"));$Window_Type_L)

v11以降,文字列をStringに渡すことができます。
返されるのは,元の文字列ですが,これにより,汎用的なコードが記述しやすくなりました。

http://doc.4d.com/4Dv15/4D/15.1/String.301-2685399.ja.html

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可