2017-05-25 44 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]的一个实例,但这不是预期的返回类型。您需要将上一次计算的结果应用于此新计算以获得预期结果。