相关疑难解决方法(0)

在Scala中,为什么我不能在没有明确指定其参数类型的情况下部分应用函数?

这会产生一个匿名函数,正如您所期望的那样(f是一个带有三个参数的函数):

f(_, _, _)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这不编译,而是给出"缺少参数类型"错误:

f(_, _, 27)
Run Code Online (Sandbox Code Playgroud)

相反,我需要明确指定下划线的类型.Scala不应该能够推断它们,因为它知道函数f的参数类型是什么吗?

scala

35
推荐指数
2
解决办法
5386
查看次数

为什么部分应用函数推迟Scala中的类实例化?

想象一下这段代码:

class Foo {
  println("in Foo")

  def foo(a: Int) = a + 1
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我们调用:

new Foo().foo _
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,将创建类Foo的实例:

in Foo
res0: (Int) => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

但是,如果我们调用它:

new Foo().foo(_)
Run Code Online (Sandbox Code Playgroud)

Foo的构造函数不会被调用:

res1: (Int) => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

如果我们说:

res1(7)
Run Code Online (Sandbox Code Playgroud)

那是Foo实例化的时候:

in Foo
res2: Int = 8
Run Code Online (Sandbox Code Playgroud)

为什么Eta扩展与部分函数应用程序在类实例化方面有所不同?

scala

6
推荐指数
1
解决办法
290
查看次数

标签 统计

scala ×2