为什么此部分应用程序无法编译?

提利昂·兰尼斯特

下列:

val add = (a: Int, b: Int) => a + b 

转换为:

object add extends Function2[Int, Int, Int] {
  def apply(a: Int, b: Int) = a + b
}

val a1 = add(_: Int, 3)

转换为:

object a1 extends Function1[Int, Int] {
  def apply(x: Int): Int = {
    add(x, 3)
  }
}

但是当我这样做时:

scala> val a2 = add _
a2: () => (Int, Int) => Int = <function0>

然后调用a2,它将引发错误:

scala> a2(1, 2) 
<console>:11: error: too many arguments for method apply: ()(Int, Int) => Int in trait Function0
              a2(1, 2)
                ^

为什么是这样?为什么下面的工作?

a2()(1, 2)
迈克尔·扎亚克(Michael Zajac)

add已经是Function2[Int, Int, Int]如果要a2具有相同的类型,则只需进行简单的分配即可。

scala> val a2 = add
a2: (Int, Int) => Int = <function2>

scala> a2(1, 2)
res3: Int = 3

您正在考虑的是将方法扩展为函数的方法。如果我们有:

def add(a: Int, b: Int): Int = a + b

然后,我们将使用add _eta展开来分配一个值。

scala> def a2 = add _
a2: (Int, Int) => Int

scala> a2(1, 2)
res4: Int = 3

不过add已经一个功能,所以下划线具有不同的含义。add现在是一个值,而不是一个方法既然add是一个,它就像返回一个的无参数方法一样Function2[Int, Int, Int]而且,如果我们尝试得到eta的展开式,我们会得到() => Function2[Int, Int, Int]

考虑一个简单的示例,其中有一个简单的val a = 1a本质上与返回1def a = 1的无参数方法相同如果我尝试获得eta扩展,我将得到() => Int

scala> val a = 1
a: Int = 1

scala> val a2 = a _
a2: () => Int = <function0>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么此Java 8程序无法编译?

为什么我的应用程序无法创建bean?

为什么此应用程序代码仅在右侧起作用,否则ReactDOM.findDOMNode querySelector无法找到className

为什么基于Firebase的应用程序在伊朗无法使用?

字体是正确的。为什么我无法在此C#控制台应用程序中显示此Unicode字符?

为什么此代码无法编译

为什么此C ++程序编译失败?

为什么C#7.2功能无法在UWP应用程序中编译?

无法解析Android应用程序的主机,为什么?

为什么此Blazor应用程序中的组件无法渲染?

为什么我的应用程序无法填满整个屏幕?

QTranslator:为什么应用程序的某些部分未翻译?

为什么LaunchAgents无法运行我的Automator应用程序?

为什么下载依赖时我的flutter应用程序无法编译?

为什么Numba无法编译此功能?

为什么我无法访问此头盔图表定义的应用程序?(在Minikube中)

为什么Dispatch无法正常工作并使应用程序崩溃

为什么此Angular应用程序在用户登录后无法处理更改显示内容的用户状态(登录\注销)?

为什么此angularjs应用程序无法启动?

为什么无法从设备上的应用程序找到活动?

为什么Composer无法安装我的应用程序

为什么使用(> 100)部分应用程序?

为什么此Angular应用程序的第二部分不起作用?

为什么此Java应用程序无法在刷新时显示JSON数据?

为什么使用Promises的节点应用程序无法返回?

为什么在控制台购买时无法在我的应用程序中使用此功能?

为什么要编译此c ++程序?

为什么我无法购买应用程序?

为什么此应用程序中的绑定无法更新?