java - Lambda 表达式参数/声明

标签 java function math lambda expression

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

我最近才开始熟悉 java Lambda 表达式(主要是函数表达式),例如 BinaryOperator 和 Bifunction..)我正在查看这些的来源,我看到你将它们声明为,例如:

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

所以在我看来,没有办法动态创建一个接口(interface)(类似于 BiFunction),但在运行时设置了一些参数和“方程式”。

我将给出一个实际示例,我认为它可以更好地解释我想解决的问题类型:

假设我想制作一个程序,用户可以在其中输入一个数学函数并在一个点上对其进行计算。首先,假设它是一个单变量函数:

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

将是问题的解决方案,除了我在运行时之前定义函数 f(x) = x^2 。 我想知道是否有一种方法可以在运行时创建一个函数,询问用户他们想输入哪个函数。

如果用户可以输入具有多个参数的方程式,那么这个问题可能会变得更加复杂。

感谢您的帮助。

最大

最佳答案

为此,您需要柯里化(Currying)。给定一个接受参数 abc 的函数 f,您可以定义 的柯里化(Currying)版本f 接受参数 a 并吐出一个函数 g 接受参数 bc。继续柯里化(Currying)过程,您将只需要担心 3 种情况:

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

因此,如果您想使用 lambda,则需要定义一个柯里化(Currying)函数的 lambda。当然,您可能还需要为您希望在运行时支持的任何代数定义相关的运算符,但这可能是一个固定的符号表(并且可能同样被定义为带参数的函数/lambda 的 hastable)。

关于java - Lambda 表达式参数/声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752719/

相关文章:

c - "Dynamic (pointer) arrays"跨函数

c++ - 从 Scilab 迁移到 C++

php - 如何评估在 PHP 中作为字符串传递的公式?

java - 从 servlet 调用 httpclient

java - 无法识别的选项 : --print-module-descriptor

java - 尝试 Spring 3 MVC,出现页面错误

excel - 如何在 vlookup 函数中使搜索范围动态化

java - 如何模拟 Jface 对话框上的“确定”按钮单击

使用 numpy 数组输入的 Python 函数给出意外结果

javascript - 具有 onClick 事件的 React 函数在控制台中抛出 "TypeError: Cannot read property ' handleDelete' of undefined”