如题,下面这个map2的方法声明理解存在问题,不理解rng这个地方的值到底是怎么传入的,如果这是scala的lambda表达式,那么rng的值是如何来的呢附上Rand的定义typeRand[+A]=RNG=>(A,RNG)defmap2[A,B,C](ra:Rand[A],rb:Rand[B])(f:(A,B)=>C):Rand[C]=rng=>{val(a,r1)=ra(rng)val(b,r2)=rb(r1)(f(a,b),r2)}defboth[A,B](ra:Rand[A],rb:Rand[B]):Rand[(A,B)]=map2(ra,rb)((_,_))
2 回答
HUH函数
TA贡献1836条经验 获得超4个赞
map2的返回值是个函数,rng只是这个函数的参数。在贴出的代码中没有对返回函数的调用,所以rng自然也没有值。rng在函数体中被ra调用ra的类型是Rand[A],也就是一个函数,接收RNG,返回(A,RNG).因而rng的类型是RNG并且代码中可以省略。
慕斯709654
TA贡献1840条经验 获得超5个赞
在REPL中做如下测试:scalascala>implicitvala=1a:Int=1scala>deftest:Int=>Double=a=>a*3.0test:Int=>Double或者:scalascala>valb=2b:Int=2scala>deftest2:Int=>Double=b=>b*3.0test:Int=>Double至于rng的来源,请查看map2方法的scope中是否有满足需求(RNG类型)的变量、隐式值等...知识点参考Scala的closure、implicitvalue等。
添加回答
举报
0/150
提交
取消