2010-01-14 54 views
3

在我的功能有一個if()聲明是這樣的:通過< or >運算符作爲參數的函數?

if(passedValue < staticValue) 

但我需要能夠傳遞一個參數口授如果表達式是像上面或者是:

if(passedValue > staticValue) 

但我不能真正通過<>運營商有一個參數,所以我想知道什麼是最好的方式來做到這一點?

而且,如果我使用的語言事項的ActionScript 3.0中

謝謝!

回答

7

而不是通過運營商,它在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; 
}); 
+0

很好的解決方案。或者,如果作者希望以字符串形式傳遞操作符,則可以將其用作查找來檢索正確的函數(從字典或類似語言)。這將需要更多的設置,可以選擇工廠簡化,但會導致更簡潔的代碼。 (即:沒有創建一個動態函數每個地方的電話) – 2010-01-14 23:33:39

+1

泰勒:我不認爲它是「更清潔」 - 這是更多的代碼維護... – LiraNuna 2010-01-14 23:55:33

+0

「(即:不創建一個動態函數每個地方調用)「 - Flash將函數優化爲靜態,所以不存在性能損失。 – LiraNuna 2010-01-15 11:19:51

0

我不知道的ActionScript,但你不能讓一個變量叫:

布爾GREATERTHAN = TRUE;

,如果它真,盡>,如果假做<?

1

爲什麼不把函數採取bool作爲參數,並直接進行比較調用函數時?

ExampleFunction(arg1, (passedValue > staticValue)) 
+0

如果被叫方已staticValue進不去? – LiraNuna 2010-01-14 20:39:05

0

你是對的,你不能通過運營商。您可以傳遞一個變量,指示要使用哪個運算符。

lessThan = true; 
func(passedValue, lessThan);