2015-07-03 136 views
0

我已经定义了以下身份函数的函数功能: -如何在Scala中定义函数,返回自己返回

def identity(n: Int) = n 

现在我定义一个函数funA返回该identity功能: -

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

这工作正常。基本上,我在这里说,我正在返回的功能实际上接受Int并返回Int

现在我想进一步。我想定义另一个功能funB,应该返回funA。我的问题是,现在返回类型不会是(Int => Int)。不像funA返回一个函数接受Int并返回Int,现在我想返回一个函数(funA)它不接受任何东西,并返回一个函数,而不是一个整数。那么我如何在Scala中语法编写这个呢?

+0

'identity'和'funA'是方法,而不是函数。目前还不清楚你想要什么。你不能返回一个方法,因为方法不是对象,你只能返回对象。 –

回答

3

funA是返回Int => Int一个参数方法。因此,作为一种功能,它将具有类型() => (Int => Int)。如果funB是也是一个返回funA一个参数的方法,它是这样的:

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

如果你要进一步采取这种(无论何种原因),作为一个函数,funB将有型

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

依此类推。

+2

注意,Scala的类型签名是右关联的,这意味着在这种情况下,没有必要用括号包围他们。 – sschaef

+1

的确如此,但它可能会让新人更容易阅读。 –

+0

谢谢,它的工作 – Dhiraj

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

虽然不能直接写funB()= funA,因为这会给funB一个和funA相同的签名。