0

ActionScript 함수 객체를 사용하면 해당 함수에 하나 이상의 선택적 매개 변수 또는 vararg 매개 변수가 있는지 여부를 확인할 수있는 방법이 있습니까? 내가 함수 속성을 통해 반영하려고했습니다ActionScript 함수에 리플렉션을 사용하는 varargs/optional 인수가 있는지 확인하십시오.

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]; 
} 

그러나이 전혀 아무것도 출력하지했던 length 속성은 받아 인수의 최소 수를 반환하는 것 같다.

누구든지 리플렉션을 통해이 정보를 찾는 방법을 알고 있습니까?

답변

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 가변 개수에 대해서도 알려주지 않습니다. 따라서 두 가지주의 사항이 있습니다 : 그들은 공개되어야하며 가변 인수를받지 못합니다 ... 그러나 더 많은 정보를 얻으실 수 있습니다 ...

더 많은 정보를 얻을 수 있을지 확신하지 못합니다. 이.

저는 항상 describeType이 개인적인 것을 반영 할 필요가 있다고 생각했습니다.하지만 슬프게도.

+0

Flex의 반사 지원은 다람쥐 다. 나는 이보다 더 고무적인 대답을 기대했다. 아 ~. – qualidafial

+0

제 문제는 Function 객체를 얻을 때까지 어떤 클래스인지 알 수있는 방법이 없습니다. 내가 아는 모든 것에 익명의 기능이 될 수 있습니다. 그래서 나는 운이없는 것처럼 보입니다. – qualidafial

1

http://bugs.adobe.com/jira/browse/FP-1472은 describeType에 varargs를 추가하는 버그입니다. 이것은 "none"의 우선 순위를 가지므로, 이것이 고쳐지기를 희망하지 않습니다. 어쩌면 그것을 투표하면 도움이 될 것입니다.

+0

어도비가 투표에 많은 비중을 둔다고 생각하지 않습니다. Linux의 Flash Builder는 Linux 포트 프로젝트 중단을 발표 한 시점에서 가장 많이 투표 된 문제였습니다. : - / – qualidafial