2011-02-06 4 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)) 
    { 
     ... 
    } 
} 

Я чувствую, что должен быть более короткий путь, чтобы написать это с таким большим количеством повторений в текущей форме. Может ли кто-нибудь предложить более чистый и эффективный способ написать это?

Спасибо за ваши мысли.

РЕДАКТИРОВАТЬ: В случае, если заявление было неправильным. Это изменилось.

Это может быть обобщено. Я просто включаю код для ясности. Если общий вопрос до сих пор не ясен, то создается впечатление:

Каков самый чистый/самый эффективный способ проверить все комбинации исключительно необязательных аргументов?

+0

Может shiftDown, controlDown variabled быть правдой, даже если нет shiftDown, controlDown в xml? – Patrick

+0

Вы уверены в порядке своих Ifs, потому что если @code установлен, вы никогда не достигнете всех остальных тестов ... – Patrick

+0

shiftDown controlDown не может быть правдой, если они не находятся в XML. Они по умолчанию имеют значение 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 немного странны. Я не знаю о KeyManager как в Flex, так и в обычном AS3, так что это код? Если это так, вы можете поместить код ключевого слова верхнего регистра там, используя метод 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 
} 

ли эта помощь? Cheers, EP.

+0

Я сделал что-то вроде этого, спасибо за предложение! – grey

Смежные вопросы