你可以稍后在Scala中为一个函数提供一个对象吗?

时间:2018-05-04 20:15:35

标签: scala

我在Scala中看到类似的东西,我想知道这个概念甚至被称为什么。

def function1(f: Dog => String): String = {
...
var doggy = new Doggy("fido")
Await.result(f(doggy)
}

function1(_.functionDefinedInDog)

这是什么概念?

2 个答案:

答案 0 :(得分:3)

如果你引用最后一行的语法,它只是匿名函数的占位符语法:

function1(_.functionDefinedInDog)

相当于:

function1(dog => dog.functionDefinedInDog)

概念本身就是将函数传递给函数(高阶函数)。请记住,您没有通过dog中定义的功能。您正在创建一个新的匿名函数,该函数将使用任何狗并在其上调用方法。 function1如何使用它取决于function1的定义:它可能会多次使用它,或者它根本不会使用它。

答案 1 :(得分:0)

它被称为函数应用程序,或将值/对象应用于函数。在你的例子中,你正在“将doggy应用于函数f”,实际上可以使用单词apply来更明确地编写。

f(doggy) == f.apply(doggy)