2008-09-16 65 views
0

在像下面这样的代码中为我的比较函数生成器声明类型的语法是什么?什么是函数赋值函数类型的flex(ActionScript3)语法?

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); }; 
}(); 

回答

1

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

+0

你是对的 - 那是有效的。我期待着像Haskell或F#那样需要更精确的东西,但我看到ActionScript更宽容。 – Eric 2008-09-16 17:23:29

0

为了理解数据类型是什么,我们必须知道返回的预期结果是什么。我需要查看compareGeneral的代码块,我仍然不相信这会有所帮助。你有两个具有相同函数“gc.sortCompareFunction”的返回值,我认为这是不正确的,因为返回值得到一个值,然后作为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需要什么功能,都可以进入其自己的功能或方法,并在需要时调用。