什么是函数值函数类型的flex(ActionScript 3)语法?

时间:2008-09-16 17:11:28

标签: flex actionscript-3

在以下代码中为比较函数生成器声明类型的语法是什么?

var colName:String = ""; // actually assigned in a loop
gc.sortCompareFunction = function() : ??WHAT_GOES_HERE??
{
   var tmp:String = colName;
   return function(a:Object,b:Object):int { return compareGeneral(a,b,tmp); };
}();

2 个答案:

答案 0 :(得分:1)

“功能”不是数据类型吗?

答案 1 :(得分:0)

为了理解数据类型是什么,我们必须知道返回的预期结果是什么。我需要看看compareGeneral的代码块,我仍然不相信这会有所帮助。你有两个具有相同功能“gc.sortCompareFunction”的返回,我相信这是不正确的,因为return获取一个值然后充当break命令意味着忽略具有相同功能块的其余任何内容。问题是我不知道哪个返回是预期的返回,我不知道flash也知道。您可以使用*作为数据类型,但这应该只在特定情况下使用。在这种情况下,我相信你只需要一个只返回compareGeneral值的返回值。

现在如果这是一个compareGenerator,它应该返回一个布尔值TRUE或FALSE,或者一个int 0或1,让我们使用前者。另外我相信我们可以少用一个功能。由于我没有看到你的所有代码,而且我不确定你想要完成什么,以下是假设。

function compareGeneral(a:object,b:object):Boolean
{
   //Check some property associated to each object for likeness.
   if(a.someAssignedPropery == b.someAssignedPropery)
   {
      return true;
   }
   return false;
}
var objA:Object = new Object();
objA.someAssignedProperty = "AS3";
objB.someAssignedProperty = "AS3";

compareGeneral(objA,objB);

在这种情况下,compareGeneral(objA,objB);返回true,虽然我们还没有做任何有用的事情。这是您可以使用它的方式。请记住,它要么返回true或false值,所以我们可以将它视为变量。

if(compareGeneral(objA,objB)) //same as if(compareGeneral(objA,objB)) == true)
{
   trace("You have found a match!");
   //Here you can call some other function or set a variable or whatever you require functionality wise based on a match being found.
}
else
{
  trace("No match could be found!");
}

我希望这能够帮助您理解数据类型和返回值。我不知道你在使用tmp做了什么,但是通常返回一个值的函数只处理那个事情,所以最好是比较函数将一个事物与另一个事物进行比较,这就是调用的范围。无论tmp需要什么功能都可以进入自己的功能或方法,并在需要时调用。