Scala 移动数学函数图

Scala 移动数学函数图,scala,Scala,我面临以下问题:我希望能够修改一个数学函数,使其在x-y图中移动。因此,我有两个变量,x和y,分别向上或向右移动函数 设f为Double=>Double类型的函数,并设x和y为上述参数。我想这样做: def moveGraph(f: Double => Double, x: Double, y: Double): Double => Double = { f(_ - x) + y } 但是,这会引发以下编译器错误: Error:(5, 7) missing paramete

我面临以下问题:我希望能够修改一个数学函数,使其在x-y图中移动。因此,我有两个变量,x和y,分别向上或向右移动函数

f
Double=>Double
类型的函数,并设
x
y
为上述参数。我想这样做:

def moveGraph(f: Double => Double, x: Double, y: Double): Double => Double = {
    f(_ - x) + y
}
但是,这会引发以下编译器错误:

Error:(5, 7) missing parameter type for expanded function ((x$1) => x$1.$minus(x))
    f(_ - x) + y
      ^

如何让
\uu
表示作为
f
传递到函数中的参数,并且仍然对其进行操作?

您的
moveGraph
函数应该如下所示:

def moveGraph(f: Double => Double, x: Double, y: Double): Double => Double =
  p => f(p - x) + y
如果要使用传入的参数,必须将其命名


编译器不理解
应该代表什么。是
的所有可能用法的列表

您的
moveGraph
函数应该如下所示:

def moveGraph(f: Double => Double, x: Double, y: Double): Double => Double =
  p => f(p - x) + y
如果要使用传入的参数,必须将其命名


编译器不理解
应该代表什么。是
的所有可能用法的列表

只需添加到Mifeet answer中,就不需要命名参数了。匿名函数的简写符号非常简单,只是在其当前范围内进行了扩展,所以

f(_ - x) + y
变成

f(param => param - x) + y
这就是编译器所做的,并抱怨它不知道类型

如果
f
需要一个函数
Int=>Int
,这将是一个有效的用法

但是你想在这里做些别的事情,你需要明确你的参数

param => f(param - x) + y

只需添加到Mifeet answer中,就不需要命名参数了。匿名函数的简写符号非常简单,只是在其当前范围内进行了扩展,所以

f(_ - x) + y
变成

f(param => param - x) + y
这就是编译器所做的,并抱怨它不知道类型

如果
f
需要一个函数
Int=>Int
,这将是一个有效的用法

但是你想在这里做些别的事情,你需要明确你的参数

param => f(param - x) + y

在scala中使用函数组合器是一种更有趣的方法:

def moveGraph(f: Double => Double, x: Double, y: Double): Double => Double  = 
 {p:Double => p - x } andThen f andThen y.+

(-x)。+第f次和第y次+
会更好,但不幸的是,它在这种情况下不起作用,因为
+
被重载了,scala被它弄糊涂了。)

在scala中使用函数组合器是一种更奇特的方法:

def moveGraph(f: Double => Double, x: Double, y: Double): Double => Double  = 
 {p:Double => p - x } andThen f andThen y.+
(-x)。+第f次和第y次+
会更好,但不幸的是,它在这种情况下不起作用,因为
+
超载了,scala被它弄糊涂了。

((u:Double)-x)第f次和第y次+
在我看来甚至有点花哨:p
((u:Double)-x)在我看来,第四个f和第三个y.+
看起来甚至有点花哨:p