Lambda表达式参数/声明

时间:2015-06-10 09:42:58

标签: java function math lambda expression

我已经注册了一段时间并且通常不会发帖,除非我真的找不到答案,现在,我觉得很困难。

我最近刚开始熟悉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之外,

将是问题的解决方案。 我想知道是否有办法在运行时期间创建一个函数,询问用户他们想要输入哪个函数。

如果用户可以输入具有多个参数的方程式,则此问题可能会更复杂。

感谢您的帮助。

最高

1 个答案:

答案 0 :(得分:2)

你需要的是currying。给定函数f,其中包含参数abc,您可以定义f的咖喱版本,其中包含参数a并吐出输出带有参数gb的函数c。继续currying过程,你只会担心3个arity案例:

  1. 零参数。调用函数。
  2. 一个论点。使用给定参数调用函数。
  3. 两个或更多的论点。咖喱函数,并重新评估,因为curried函数将减少arity。
  4. 因此,如果你想使用lambda,你需要定义一个curda函数的lambda。当然,您可能还需要为运行时期间要支持的任何代数定义相关运算符,但这可能是一个固定的符号表(并且可能同样被定义为函数/ ​​lambda采用的函数)参数)。