我重溫一些舊的代碼過濾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))
{
...
}
}
我覺得必須有到有這麼多的重複寫一個較短的方式目前的形式。有人可以建議一個更清潔和更有效的方式來寫這個嗎?
感謝您的想法。
編輯:if語句順序是錯誤的。改變了。
這可以推廣。爲了清晰起見,我只包括我的代碼。如果一般問題仍然不清楚,我得到的印象是:
什麼是最純淨/最有效的方式來測試排他性的可選參數的所有組合?
能降檔,controlDown variabled即使沒有降檔,controlDown在XML是真的嗎? – Patrick 2011-02-06 01:42:34
你確定你的IF順序的,因爲如果@code設置你將永遠不會達到所有其他的測試......如果他們在XML不是 – Patrick 2011-02-06 02:19:13