2017-05-25 24 views

回答

1

我不完全知道Rand[A]結構,所以這是部分猜測。你在這個函數中返回的是Rand[B],當你實現這個函數時,你首先定義一個匿名函數的參數rng。這告訴我,Rand本身可能是某種功能。

在第二行(val (a, r1) = f(rng))中,將值rng應用於實例f: Rand[A]。在結果元組中,a的類型爲A

請注意,f(rng)等於明確呼叫applyf.apply(rng)

通過將此值應用於函數g,可以使用值a獲取Rand[B]。所以,val rb: Rand[B] = g(a)(或g.apply(a))。

現在,你不想在這個匿名函數中返回Rand[B]的實例!相反,您需要將以前的結果r1應用於此實例rb。所以,你得到rb(r1)rb.apply(r1)。用rb代替g(a)g.apply(a)可得到g(a)(r1)g.apply(a).apply(r1)

總而言之,如您所說,g應該只帶一個參數,這會導致Rand[B]的一個實例,但這不是預期的返回類型。您需要將上一次計算的結果應用於此新計算以獲得預期結果。

相關問題