グローバル関数
1
クラスメソッドと同名のグローバル関数使用の注意点
1
クラスのメソッドと同名のグローバル関数を使用する場合、ユーザークラス内にてグローバル関数を使用すると、同名のクラスメソッドと解釈されてしまい、実行に失敗するケースが存在します。
例)
(1)
ユーザークラス「extString extends String」を定義する。
(2)
ユーザークラスextString内のファンクションに、グローバル関数splitを実行する処理を記述する。
(3)
ファンクションを実行する。グローバル関数splitがString.Splitメソッドと解釈され、実行に失敗する可能性がある。
下記Form1.crsのサンプルを起動後「実行(エラー発生)」ボタンを押下し、ext_String.func関数を
実行すると「CRS 124 関数'split'の引数が多すぎます。」のエラーが発生します。
[エラー内容]
split関数以外でも、クラスのメソッドと同名のグローバル関数を該当のユーザークラス内で
実行する場合はご注意ください。
【 ▼当事象が発生する可能性のあるグローバル関数 】
関数名
同名のメソッドが存在するクラス
find関数
CSVDocument
replace関数
CSVDocument、String
split関数
String、RegexMatchar
trim関数
String、RegexMatchar
round関数
Fixed、Math
rounddown関数
Fixed
roundup関数
Fixed
max関数
Math
min関数
Math
[ Form1.crs ]
import "Package1.crs"; Form Form1 { Width = 234; Height = 278; Button Button1 { X = 25; Y = 49; Width = 183; Height = 34; Title = "実行(OKパターン)"; Function OnTouch( e ) { /* Form1内で定義しているファンクションを実行 */ var kekka = ^.do_Split(); /* 結果をメッセージボックスで表示 */ //.MessageBox(kekka); } } Button Button2 { X = 25; Y = 138; Width = 183; Height = 34; Title = "実行(エラー発生)"; Function OnTouch( e ) { /* ユーザークラスextStringクラス内で定義しているファンクションを実行 */ var ext_String = new extString(); var kekka2 = ext_String.func(); /* 結果をメッセージボックスで表示 */ //.MessageBox(kekka2); } } Function do_Split(){ /* 文字列をスラッシュで区切る */ var rtn = Split("1999/08/10", "/", 0); /* 結果として一番左の要素「1999」を返す */ return rtn; } }
[ Package1.crs ]
Package Package1 { /* Stringを拡張したユーザークラスextString */ class extString extends String{ Function func(){ /* ・Stringを拡張したユーザークラスextStringクラス内でグローバル関数のsplit関数を実行するような記述を行います。 ・Stringクラスには同名のString.Splitメソッドが存在しています。 下記記述をした場合、グローバル関数のsplit関数ではなく、String.Splitメソッドと解釈され、 String.Splitメソッドとして実行されてしまいます。 グローバル関数のsplit関数とString.Splitメソッドでは引数の仕様が異なるため、 結果として、エラーが発生することとなります。 */ var s = "1999/08/10"; /* this.split()が実行されることになります。※ここでの「this」はextStringとなります。 */ var s1 = split(s, "/", 0); var s2 = split(s, "/", 1); var s3 = split(s, "/", 2); return s1; } } }
管理番号:GlbHt_001
Biz-Collections Bizの宝箱 トップへ
Biz/Browser HT・Biz/Browser SmartDevice・Biz/Browser AI TIPS集 トップへ