我在Scala中看到类似的东西,我想知道这个概念甚至被称为什么。
def function1(f: Dog => String): String = {
...
var doggy = new Doggy("fido")
Await.result(f(doggy)
}
function1(_.functionDefinedInDog)
这是什么概念?
答案 0 :(得分:3)
如果你引用最后一行的语法,它只是匿名函数的占位符语法:
function1(_.functionDefinedInDog)
相当于:
function1(dog => dog.functionDefinedInDog)
概念本身就是将函数传递给函数(高阶函数)。请记住,您没有通过dog中定义的功能。您正在创建一个新的匿名函数,该函数将使用任何狗并在其上调用方法。 function1
如何使用它取决于function1
的定义:它可能会多次使用它,或者它根本不会使用它。
答案 1 :(得分:0)
它被称为函数应用程序,或将值/对象应用于函数。在你的例子中,你正在“将doggy应用于函数f”,实际上可以使用单词apply来更明确地编写。
f(doggy) == f.apply(doggy)