scala 一个语法问题

如题,下面这个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)((_,_))
一只萌萌小番薯
浏览 347回答 2
2回答

HUH函数

map2的返回值是个函数,rng只是这个函数的参数。在贴出的代码中没有对返回函数的调用,所以rng自然也没有值。rng在函数体中被ra调用ra的类型是Rand[A],也就是一个函数,接收RNG,返回(A,RNG).因而rng的类型是RNG并且代码中可以省略。

慕斯709654

在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等。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript