Узнать, есть ли у функции ActionScript varargs / optional аргументы, используя отражение?

Имея объект функции ActionScript, есть ли способ определить, имеет ли эта функция один или несколько необязательных параметров или параметры vararg? Свойство length, кажется, возвращает минимальное количество принятых аргументов:

function vararg(a:*, b:*, ...rest):void {}
function optional(a:*, b:* = null, c:* = null):void {}

trace(vararg.length);   // 2
trace(optional.length); // 1

Я пробовал размышлять над свойствами функции:

for (var name:String in optional) {
  trace(name + ": " + optional[name];
}

Однако это вообще ничего не дало.

Кто-нибудь знает, как обнаружить эту информацию через размышление?


person qualidafial    schedule 08.04.2011    source источник


Ответы (2)


Что ж, я могу подвести вас немного ближе, но не до конца.

Если вы вызовете describeType для объекта, который имеет функцию, И эти функции являются общедоступными, вы получите дополнительную информацию о функциях:

var description:XML = describeType(this);
var testFunction:* = description.method.(@name == "optional")[0];

trace(testFunction);

Это даст вам полезный результат:

<method name="optional" declaredBy="MyClass" returnType="void">
  <parameter index="1" type="*" optional="false"/>
  <parameter index="2" type="*" optional="true"/>
  <parameter index="3" type="*" optional="true"/>
  <metadata name="__go_to_definition_help">
    <arg key="file" value="/path/to/MyClass.mxml"/>
    <arg key="pos" value="222"/>
  </metadata>
</method>

Он также не скажет вам о ...rest varargs. Итак, есть два предостережения: они должны быть общедоступными И вы не получите varargs ... но вы получите гораздо больше информации ...

Я не уверен, что вы сможете получить больше информации, чем эта.

Я всегда думал, что describeType нужно уметь размышлять и о личных вещах ... но, увы.

person Brian Genisio    schedule 09.04.2011
comment
Согласитесь, поддержка отражений в Flex немного сложна. Я надеялся на более обнадеживающий ответ, чем этот. Ах хорошо. - person qualidafial; 11.04.2011
comment
Моя проблема в том, что к тому времени, когда я получаю объект Function, у меня нет возможности узнать, из какого он класса. Насколько я знаю, это могла быть анонимная функция. Похоже, мне не повезло. - person qualidafial; 11.04.2011

http://bugs.adobe.com/jira/browse/FP-1472 ошибка добавления varargs для описанияType. У него есть приоритет «нет», что не вселяет особых надежд на то, что это будет исправлено. Возможно, голосование поможет.

person Charlie Groves    schedule 12.04.2011
comment
Я не думаю, что Adobe придает большое значение голосам. Проблема с Flash Builder для Linux была самой высокой на тот момент, когда они объявили о приостановке проекта переноса Linux. : - / - person qualidafial; 13.04.2011