0

次のような関数を宣言すると:

public function foo():void
{
    // do something
}

その関数では、次のようなログ メッセージを使用して、アーリー アウトすることを決定する場合があります。

public function foo():void
{
    if( somethingWentWrong )
    {
        log( "blah blah" );
        return;
    }

    // do something
}

wherelog()は基本的に のラッパーでtrace()あり、署名付きpublic function log( msg:String ):void

少しスペースを節約するために、そのチェックを書き直して、次のように早めるかもしれません。

public function foo():void
{
    if( somethingWentWrong )
        return log( "blah blah" );

    // do something
}

これは 99% の確率で問題なくコンパイルおよび実行されますが、ときどき(プロジェクトの別の無関係な部分にバグがある場合、またはクリーンアップを行う場合)、次の形式でコンパイル エラーが発生します。

"Error: Return value must be undefined"

そして、コンパイルするには長い形式で書き直す必要があります。コンパイルしたら、短い形式のバージョンに戻すことができ、すべてが再び満足のいくものになります。

ただし、このエラーが発生するとイライラするので、3 行の冗長性を導入するためにコードを書き直す必要はありません。なぜそれが起こっているのか(そしてごくまれに)、そしてどこにでも長い形式を書く前にそれを止める方法について何か考えはありますか? 技術的には、log()返品を見て、void問題はないはずです。

4

2 に答える 2

1

関数が値を「返す」場合は、型を定義する必要があります。

関数が「void」として定義されていますが、値を「返そう」としています。

値を返すつもりなら、これが正しい関数の書き方です:

// if you want to return a value, you must specify the type
public function foo():String
{
    if( somethingWentWrong )
    {
        // I am assuming that log returns a String
        return log( "blah blah" );
    }
        else
        {
            return null;
        }
}

また、戻り値の型を指定する場合、関数は値を返さなければなりません。

あなたがしようとしていることに基づいて、ログ関数が文字列を返すことも確認する必要があるようです。関数のシグネチャは次のとおりです。

public function log(msg:String):String

文字列を返す必要があります。

于 2013-04-10T16:13:58.453 に答える