1

我有一個函數在斯卡拉如何咖喱現有的函數與單個參數並傳遞給更高階的函數?

def myInnerFunc(a: Int): Int = a 

現在我想將它傳遞給高階函數,我想它要傳遞給參數預先初始化高階功能,所以首先需要調用我的內在功能與適當的參數,只有這樣,我可以把它傳遞給高階函數這將彌補這樣的:

def myHigherOrderFunction(func: Int => Int): Int = { 
    func() 
} 

所以我需要完成下面的代碼

myInnerFunc(1) // hmm fix this will actually call my innner function I just want to preinitialize it with one. 
func() // didn't work for me how do i run my preinitialized with argument func Int => Int 
  1. 如何使用參數1預先初始化myInnerFunc而不運行它?
  2. 如何從高階函數內運行func()?

我不知道該怎麼做,也找不到相關的文檔,任何人都可以提供一個例子嗎? (我看到的是一個包含多個參數所有的例子,我有一個單一的一個)

回答

0

讓我們把你按相反的順序問題:

如何從高階函數內運行FUNC()?

如果參數已經提供,並不需要再次,所以myHigherOrderFunction應該是這個樣子:

def myHigherOrderFunction(func: Unit => Int): Int = { func() } 

如何與參數1預初始化myInnerFunc不運行它?

因此,您需要某種類型的Unit => Int

val thunk: Unit => Int = { _ => myInnerFunc(argument) } 
1

如果你只是想通過包裝它的另一個函數內以某種方式延遲f的評價,你可以使用匿名函數:

val outer = {() => f(1) }

原因單個參數柯里是不是經常因爲這是因爲沒有副作用,產生一個常數,這並不令人興奮或有用。

+0

這不會延遲評估。 –

+0

對不起,這是事實。我糾正了它。 –