Lambda 表达式 Parameters/declaration

Lambda Expression Parameters/declaration

报名有一段时间了,平时不报名post,除非真的找不到答案,现在感觉很卡。

我最近才开始熟悉 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 。 我想知道是否有一种方法可以在运行时创建一个函数,询问用户他们想输入哪个函数。

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

感谢您的帮助。

最大

你需要的是柯里化。给定一个接受参数 abc 的函数 f,你可以定义一个 f 的柯里化版本,它接受参数 a 并吐出输出一个函数 g,它接受参数 bc。继续 currying 过程,你将只需要担心 3 种情况:

  1. 零参数。调用函数。
  2. 一个参数。使用给定参数调用函数。
  3. 两个参数或更多。柯里化函数,并重新评估,因为柯里化函数的数量将减少。

所以如果你想使用 lambda,你需要定义一个 curries 函数的 lambda。当然,您可能还需要为运行时支持的任何代数定义相关运算符,但这可能是一个固定符号 table (并且可能同样定义为 table 的 functions/lambdas接受论证)。