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);
}
}


