2008-09-16 2 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, означающая, что остальная часть ничего с одним и тем же функциональным блоком игнорируется. Проблема в том, что я не знаю, какой возврат является предполагаемым возвратом, и я не знаю, что флэш знает. Вы можете использовать * как тип данных, но это должно использоваться только в определенных ситуациях. В этой ситуации я считаю, что вам нужно только одно возвращаемое значение, которое возвращает только значение 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, вы можете войти в свою собственную функцию или метод и вызывать при необходимости.

Смежные вопросы