2015-06-10 57 views
3

我已經註冊了一段時間,除非我真的找不到答案,現在,我覺得很困難。Lambda表達式參數/聲明

我最近纔開始漸漸熟悉了Java Lambda表達式(主要是功能的),如BinaryOperator和雙功能..)我一直在尋找的來源,這些和我看你聲明它們,例如:

public interface BiFunction<T, U, R> {...}. 

因此,在我看來,沒有辦法動態創建一個接口(類似於BiFunction),但有許多參數和運行時設置的「公式」。

我會給我認爲將解釋一個實際的例子好得多,我想解決的問題的類型:

可以說,我想使一個程序,用戶可以輸入一個數學函數,並對其進行評估在一個點上。首先,讓我們假設這是一個一個變量函數,以便:

Function<Integer,Integer> f1 = (x) -> Math.pow(x,2); 

是將問題的解決方案,不同之處在於我定義函數f(x)= X^2運行時之前。 我想知道是否有辦法在運行期間創建一個函數,詢問用戶他們想要輸入哪個函數。

如果用戶可以輸入具有多個參數的方程,那麼此問題可能會變得更復雜。

感謝您的任何幫助。

最大

回答

2

您需要的是咖啡。給定一個函數f這需要參數abc您可以定義一個f咖喱版本,這需要參數a和吐出功能g這需要參數bc。繼續咖喱過程,你將只有3種情況擔心:

  1. 零參數。調用該函數。
  2. 一個說法。用給定的參數調用函數。
  3. 兩個參數或更多。咖喱的功能,並重新評估,因爲咖喱功能將有一個減少arity。

所以,如果你想使用lambda的,你需要定義一個函數lambda函數。當然你也可能需要爲運行時需要支持的代數定義相關的運算符,但這可能是一個固定的符號表(也可能同樣定義爲函數/ ​​lambdas帶參數的可信度)。

+0

感謝您的回答,我會研究Java中的currying。 – Max