Каков синтаксис flex (ActionScript3) для типа функции с функцией-значением? - PullRequest
0 голосов
/ 16 сентября 2008

Каков синтаксис объявления типа для моего генератора функций сравнения в коде, подобном следующему?

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 ]

1 голос
/ 16 сентября 2008

Разве «Функция» не является типом данных?

0 голосов
/ 24 сентября 2008

Чтобы понять, что это за тип данных, мы должны знать, каков ожидаемый результат возврата. Мне нужно увидеть блок кода для CompareGeneral, и я все еще не верю, что это поможет. У вас есть два возврата с одной и той же функцией "gc.sortCompareFunction", я считаю, что это неверно, так как return получает значение, а затем действует как команда прерывания, что означает, что остальная часть всего с тем же функциональным блоком игнорируется. Проблема в том, что я не знаю, какой возврат является предполагаемым, и я не знаю, что Flash знает тоже. Вы можете использовать * в качестве типа данных, но это действительно должно использоваться только в определенных ситуациях. В этой ситуации я полагаю, что вам нужно только одно возвращаемое значение, которое просто возвращает любое значение compareGeneral

Теперь, если это CompareGenerator, он действительно должен либо возвращать логическое ИСТИНА, либо ЛОЖЬ, либо 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);

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

...