2015-07-03 142 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相同的簽名。