如果我声明这样的函数:
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
,就没有问题。
答案 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
它应该返回一个字符串。