如何在Scala中定义函数,返回一个函数,该函数本身返回一个函数

时间:2015-07-03 14:21:01

标签: scala

我定义了以下身份功能: -

def identity(n: Int) = n

现在我正在定义一个返回此funA函数的函数identity: -

def funA(): (Int => Int) = identity

这很好用。基本上,我在这里说我返回的函数实际上接受Int并返回Int

现在我想进一步。我想定义另一个函数funB,它应返回funA。我的问题是现在返回类型不是(Int => Int)。与返回接受funA并返回Int的函数的Int不同,现在我想返回一个函数(funA),该函数不接受任何内容并返回函数而不是整数。那么我如何在Scala中以语法形式编写它?

2 个答案:

答案 0 :(得分:3)

funA是一个无参数的方法,返回Int => Int。因此,作为一个函数,它将具有类型() => (Int => Int)。如果funB也是一个返回funA的无参数方法,它将如下所示:

def funB(): () => (Int => Int) = funA

如果您要进一步(无论出于何种原因),作为一个函数,funB将具有类型

() => (() => (Int => Int)))

等等..

答案 1 :(得分:0)

def funB(): (()=> Int=>Int) = funA

你不能直接写def funB()= funA,因为这会给funB带来与funA相同的签名。