2008-09-16 49 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需要什麼功能,都可以進入其自己的功能或方法,並在需要時調用。