我已经注册了一段时间并且通常不会发帖,除非我真的找不到答案,现在,我觉得很困难。
我最近刚开始熟悉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之外,将是问题的解决方案。 我想知道是否有办法在运行时期间创建一个函数,询问用户他们想要输入哪个函数。
如果用户可以输入具有多个参数的方程式,则此问题可能会更复杂。
感谢您的帮助。
最高
答案 0 :(得分:2)
你需要的是currying。给定函数f
,其中包含参数a
,b
和c
,您可以定义f
的咖喱版本,其中包含参数a
并吐出输出带有参数g
和b
的函数c
。继续currying过程,你只会担心3个arity案例:
因此,如果你想使用lambda,你需要定义一个curda函数的lambda。当然,您可能还需要为运行时期间要支持的任何代数定义相关运算符,但这可能是一个固定的符号表(并且可能同样被定义为函数/ lambda采用的函数)参数)。