Узнайте, есть ли в ActionScript функция varargs / необязательные аргументы с использованием отражения?
Имеется ли объект функции 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];
}
Однако это ничего не выводило вообще.
Кто-нибудь знает, как открыть эту информацию с помощью размышлений?
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... но вы получите гораздо больше информации...
Я не уверен, что вы сможете получить больше информации, чем эта.
Я всегда думал describeType
нужно уметь размышлять и о личных вещах... но увы.
http://bugs.adobe.com/jira/browse/FP-1472 - это ошибка, добавляющая varargs для descriptionType. У него есть приоритет "нет", что не дает большой надежды, что это будет исправлено. Возможно, голосование за это поможет.