2011-02-06 2 views
0

XML을 필터링하는 일부 오래된 코드를 다시 살펴보고 있지만이 방법은 메서드의 매개 변수에 쉽게 적용될 수 있습니다 (필자가 사용하는 방법과 동일합니다). 이것은 내가 많이 들어가서이 문제를 해결하는 좋은 방법을 모르는 것처럼 느껴지는 문제입니다.AS3 : 선택적 인수 및 조합에 대한 테스트

그래서 문제는 3 가지 인자가 있다는 것입니다. 그들은 모두 선택적입니다. 나는 그 값이 사람은 (가능성에 따라 정렬) 존재하는 기반으로하는 경우 선물 및 테스트되는 것을보고 싶지 :

var shiftDown : Boolean = false; 
var controlDown : Boolean = false; 

if ("@shift" in x) 
{ 
    shiftDown = Global.stringToBoolean([email protected]()); 
} 
if ("@control" in x) 
{ 
    controlDown = Global.stringToBoolean([email protected]()); 
} 


if ("@code" in x && "@shift" in x && "@control" in x) 
{ 
    if (KeyManager.keyIsDown(KeyManager[ [email protected]().toUpperCase() ]) && (KeyManager.shiftKey == shiftDown) && (KeyManager.controlKey == controlDown)) 
    { 
     ... 
    } 
} 
else if ("@code" in x && "@shift" in x) 
{ 
    if (KeyManager.keyIsDown(KeyManager[ [email protected]().toUpperCase() ]) && (KeyManager.shiftKey == shiftDown)) 
    { 
     ... 
    }  
} 
else if ("@code" in x && "@control" in x) 
{ 
    if (KeyManager.keyIsDown(KeyManager[ [email protected]().toUpperCase() ]) && (KeyManager.controlKey == controlDown)) 
    { 
     ... 
    }  
}  
else if ("@code" in x) 
{ 
    if (KeyManager.keyIsDown(KeyManager[ [email protected]().toUpperCase() ])) 
    { 
     ... 
    } 
} 
else if ("@shift" in x) 
{ 
    if (KeyManager.shiftKey == shiftDown) 
    { 
     ... 
    } 
} 
else if ("@control" in x) 
{ 
    if (KeyManager.controlKey == controlDown) 
    { 
     ... 
    } 
} 

else if ("@control" in x) && ("@shift" in x)) 
{ 
    if ((KeyManager.shiftKey == shiftDown) && (KeyManager.controlKey == controlDown)) 
    { 
     ... 
    } 
} 

내가 너무 많은 반복으로이를 작성하는 짧은 방법이 있어야한다 같은 느낌 현재의 형태입니다. 누군가 이것을 작성할 수있는보다 깨끗하고 효율적인 방법을 제안 할 수 있습니까?

의견을 보내 주셔서 감사합니다.

EDIT : if 문 순서가 잘못되었습니다. 그것을 바꿨다.

이것은 일반화 될 수 있습니다. 나는 명확성을 위해서 제 코드를 포함하고 있습니다. 일반적인 질문이 아직 명확하지 않은 경우 다음과 같은 느낌이 들게됩니다.

독점적 인 선택적 인수의 모든 조합을 테스트하는 가장 깨끗하고 효율적인 방법은 무엇입니까?

+0

shiftDown, controlDown이 xml에도 없더라도 shiftDown, controlDown vary는 true가 될 수 있습니까? – Patrick

+0

ifcode의 순서는 확실합니까? 왜냐하면 @code가 설정되면 다른 모든 테스트에 도달하지 않기 때문입니다 ... – Patrick

+0

shiftDown controlDown은 XML에없는 경우 true 일 수 없습니다. 기본값은 false입니다 (포함시켜야 함). 다시 : 주문. 응, 어젯밤에 자고있는 동안 깨달았다. 주문에 개정이 필요했습니다. – grey

답변

0

여기에 몇 가지 가정을 할 것입니다. 예를 들어, 키 누르기를 기반으로 작업을 수행하려고합니다. XML은 특정 키를 사용 가능하게하거나 사용 불가능하게할지 여부와 상관없이 일종의 기본 설정을 포함하는 것으로 보입니다. 키 코드에 따라 두 개의 결정된 키, 이동 및 제어 및 와일드 카드 키가 있습니다. 이러한 가정이 정확하다면 환경 설정 테스트와 실제 키 테스트를 한 줄로 결합하여 작업을 단축 할 수 있어야합니다.

var shiftIsDown:Boolean = [email protected]() ? KeyManager.keyIsDown(KeyManager [ [email protected]().toUpperCase() ]) : false; 
var controlIsDown:Boolean = [email protected]() ? KeyManager.keyIsDown(KeyManager [ [email protected]().toUpperCase() ]) : false; 
var customIsDown:Boolean = [email protected]() ? KeyManager.keyIsDown(KeyManager [ [email protected]().toUpperCase() ]) : false; 

KeyManager 줄이 약간 이상하다고 생각합니다. 나는 Flex 나 정규 AS3에서 KeyManager를 인식하지 못하므로이 사용자 정의 코드가 무엇입니까? 그렇다면 여기에있는 모든 것을 수행하는 대신 customKeyIsDown() 메소드를 통해 대문자 키 코드를 일치시킬 수 있습니다. 어쨌든 Shift 및 Control이 고정되어 있으므로 XML 값을 역으로 일치시킬 필요가 없습니다.

var shiftIsDown:Boolean = [email protected]() ? KeyManager.keyIsDown(KeyManager.SHIFT) : false; 
var controlIsDown:Boolean = [email protected]() ? KeyManager.keyIsDown(KeyManager.CONTROL) : false; 
var customIsDown:Boolean = [email protected]() ? KeyManager.customKeyIsDown([email protected]) : false; 

나는이 이미 조금 명확하게 생각하지만, 다시, 나는의 KeyManager가 정확히 무엇을하는지 모른다. 이 후에도 여전히 세 가지 변수가 있으며 모두 선택 사항입니다. 그들 모두가 독점적 일 필요가 있다면, 그것은 당신에게 8 가지 가능한 결과를 남깁니다. 당신이 키를 기반으로하고있는 것은 비록 독점이 아닌 경우

if (shiftIsDown && controlIsDown && customIsDown) { 
    // 1 
} else if (shiftIsDown && controlIsDown) { 
    // 2  
} else if (shiftIsDown && customIsDown) { 
    // 3  
} else if (shiftIsDown) { 
    // 4  
} else if (controlIsDown && customIsDown) { 
    // 5  
} else if (controlIsDown) { 
    // 6  
} else if (customIsDown) { 
    // 7 
} else { 
    // 8 
} 

, 당신은 단지 세 가지 핵심 기반 작업

if (shiftIsDown) { 
    // 1 
} 
if (controlIsDown) { 
    // 2 
} 
if (customIsDown) { 
    // 3 
} 

이 도움이됩니까을 수행하기로 돌아갈 수 있을까? 건배, EP.

+0

나는이 같은 것을했는데, 제안에 감사드립니다! – grey