0

ブール型パラメーターを持つメソッドにVectorを渡すと、コンパイラーが文句を言うと予想していました。しかし、それは警告さえしませんでした。スプライトをパラメーターとして渡すと、警告が表示されますが、プログラムはコンパイルされます。型チェックシステムがこれをキャッチしないのはなぜですか?

package {
    import flash.display.Sprite;

    public class Main extends Sprite {
        public function Main():void {
            test(new Vector.<Number>()); // No warning or error.
            test(new Sprite()); // Warning, but no error.
        }

        public function test(value:Boolean):void {
        }
    }
}
4

1 に答える 1

4

これは、関数test()が true か false かに応じて、指定した値を Boolean (true または false) にキャストするためです

例:

function test(bool:Boolean):void
{
    trace(bool);
}

test( new Sprite() ); // true
test( 5 );            // true
test( undefined );    // false
test( "" );           // false
test( null );         // false

ifこれは、ステートメントを準備するときに使用されるのと同じプロセスです。

if(new Sprite())
{
    trace("Yep.");
}

if(null)
{
    // Never happens.
    trace("Nope.");
}

Boolean へのキャストのプロセスについて詳しくは、Casting to Boolean をご覧ください。

ハイライト

  • Object クラスのインスタンスから Boolean にキャストすると、インスタンスが null の場合は false が返されます。それ以外の場合は true を返します。
  • 文字列値からブール値へのキャストは、文字列が null または空の文字列 ("") の場合に false を返します。それ以外の場合は true を返します。
  • 数値データ型 (uint、int、および Number) から Boolean にキャストすると、数値が 0 の場合は false になり、それ以外の場合は true になります。Number データ型の場合、値 NaN も false になります。
于 2013-02-27T23:39:52.850 に答える