AS3“错误:返回值必须未定义”

时间:2013-04-10 15:43:04

标签: actionscript-3

如果我声明这样的函数:

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

有时在该功能中,我可能会决定提前退出,通常会带有日志消息,如下所示:

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

    // do something
}

其中log()本质上是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,就没有问题。

2 个答案:

答案 0 :(得分:2)

你的功能声明:

public function foo():void

建议你的功能不应该返回任何东西。所以,如果我是你,我只会做

log( "blah blah" );
return;

而不是

return log( "blah blah" );

第二个版本很糟糕,不仅因为它并不总是有效,而且还会导致代码的任何读者都认为log返回一个值,而实际上并非如此。 / p>

它使您的代码更难以理解。

答案 1 :(得分: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;
        }
}

此外,如果指定返回类型,函数必须返回一个值。

根据您要执行的操作,您似乎还需要确保日志函数返回String。函数签名应为:

public function log(msg:String):String

它应该返回一个字符串。