在我的功能有一個if()
聲明是這樣的:通過< or >運算符作爲參數的函數?
if(passedValue < staticValue)
但我需要能夠傳遞一個參數口授如果表達式是像上面或者是:
if(passedValue > staticValue)
但我不能真正通過<
或>
運營商有一個參數,所以我想知道什麼是最好的方式來做到這一點?
而且,如果我使用的語言事項的ActionScript 3.0中
謝謝!
在我的功能有一個if()
聲明是這樣的:通過< or >運算符作爲參數的函數?
if(passedValue < staticValue)
但我需要能夠傳遞一個參數口授如果表達式是像上面或者是:
if(passedValue > staticValue)
但我不能真正通過<
或>
運營商有一個參數,所以我想知道什麼是最好的方式來做到這一點?
而且,如果我使用的語言事項的ActionScript 3.0中
謝謝!
而不是通過運營商,它在AS3是不可能的,爲什麼不通過自定義的比較函數?
function actualFunction(passedValue:Number, compareFunction:Function) {
/* ... */
if(compareFunction(passedValue, staticValue)) {
/* ... Do something ... */
}
/* ... */
}
然後使用它:
actualFunction(6, function(x:Number, y:Number) {
return x > y;
});
或:
actualFunction(6, function(x:Number, y:Number) {
return x < y;
});
我不知道的ActionScript,但你不能讓一個變量叫:
布爾GREATERTHAN = TRUE;
,如果它真,盡>,如果假做<?
爲什麼不把函數採取bool
作爲參數,並直接進行比較調用函數時?
ExampleFunction(arg1, (passedValue > staticValue))
如果被叫方已staticValue進不去? – LiraNuna 2010-01-14 20:39:05
你是對的,你不能通過運營商。您可以傳遞一個變量,指示要使用哪個運算符。
lessThan = true;
func(passedValue, lessThan);
很好的解決方案。或者,如果作者希望以字符串形式傳遞操作符,則可以將其用作查找來檢索正確的函數(從字典或類似語言)。這將需要更多的設置,可以選擇工廠簡化,但會導致更簡潔的代碼。 (即:沒有創建一個動態函數每個地方的電話) – 2010-01-14 23:33:39
泰勒:我不認爲它是「更清潔」 - 這是更多的代碼維護... – LiraNuna 2010-01-14 23:55:33
「(即:不創建一個動態函數每個地方調用)「 - Flash將函數優化爲靜態,所以不存在性能損失。 – LiraNuna 2010-01-15 11:19:51