获取对arity-0 scala函数的引用

Asa*_*din 1 types scala invocation

Scala允许在没有括号的情况下调用没有参数列表的函数:

scala> def theAnswer() = 42
theAnswer: ()Int

scala> theAnswer
res5: Int = 42
Run Code Online (Sandbox Code Playgroud)

我将如何构造一个scala表达式来计算函数theAnswer本身,而不是结果theAnswer?或者换句话说,我将如何修改表达式theAnswer,以便结果是类型() => Int,而不是类型Int

Dmi*_*urg 6

它可以通过以下方式完成:

scala> theAnswer _
res0: () => Int = <function0>
Run Code Online (Sandbox Code Playgroud)

答案到类似的问题:

规则实际上很简单:只要编译器没有明确地期望Function对象,就必须编写_.

此调用将每次创建新实例,因为您将"转换"方法转换为函数(所谓的"ETA扩展").