簡體   English   中英

Lambda表達式參數/聲明

[英]Lambda Expression Parameters/declaration

我已經注冊了一段時間,除非我真的找不到答案,否則通常不會發布,現在,我覺得很困難。

我剛剛開始熟悉java Lambda表達式(主要是函數表達式),比如BinaryOperator和Bifunction ..)我正在查看這些的來源,我看到你將它們聲明為,例如:

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

所以在我看來,沒有辦法動態創建一個接口(類似於BiFunction),但在運行時設置了許多參數和'equation'。

我將舉一個實際的例子,我認為這將更好地解釋我想要解決的問題類型:

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

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

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

如果用戶可以輸入具有多個參數的方程,則該問題可能更復雜。

謝謝你的幫助。

馬克斯

你需要的是currying。 給定一個帶參數abc的函數f ,你可以定義f的curry版本,它接受參數a並吐出一個帶參數bc的函數g 繼續currying過程,你將只有3個arity案例擔心:

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

因此,如果你想使用lambda,你需要定義一個curda函數的lambda。 當然,您可能還需要為運行時期間要支持的任何代數定義相關運算符,但這可能是一個固定的符號表(並且可能同樣被定義為帶參數的函數/ lambda的hastable)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM