Action Script 2.0 三項演算子内 getter 使用のコンパイルエラー
Action Script 2.0 三項演算子内で getter を使用する場合、代入対象の値を全て getter にするとコンパイルエラーが発生します。
以下のような Sampleクラスがあるとします。
class Sample{ private var num1:Number = 1; private var num2:Number = 1; public function get _num1():Number{ return num1; } public function get _num2():Number{ return num2; } }
ここで、以下の Test クラスのような三項演算子での Sample クラスの getter の利用は問題はありません。
class Test{ public function Test(flg:Boolean){ var sample:Sample = new Sample(); var num1:Number = flg ? 1 : 2; var num2:Number = flg ? sample._num1 : 2; var num3:Number = flg ? 1 : sample._num2; } }
しかし以下の用な記述を行うと、コンパイルエラーが発生します。
class Test{ public function Test(flg:Boolean){ var sample:Sample = new Sample(); //コンパイルエラー発生 var num:Number = flg ? sample._num1 : sample._num2; } }
■エラー内容 代入ステートメントが一致しません。Function が見つかりましたが、Numberが必要です。
getter の sample._num1 と sample1._num2 がNumber型ではなく Function型として評価されてしまうようです。
上記エラーを避け、なおかつ三項演算子を使用したい場合は、キャストを用いて型変換を行えばよいようです。
class Test{ public function Test(flg:Boolean){ var sample:Sample = new Sample(); //コンパイルエラーは発生せず var num:Number = flg ? Number(sample._num1) : Number(sample._num2); } }