为了账号安全,请及时绑定邮箱和手机立即绑定

scala 一个语法问题

scala 一个语法问题

一只萌萌小番薯 2019-04-13 08:36:39
如题,下面这个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并且代码中可以省略。
                            
查看完整回答
反对 回复 2019-04-13
?
慕斯709654

TA贡献1840条经验 获得超5个赞

在REPL中做如下测试:
scalascala>implicitvala=1
a:Int=1
scala>deftest:Int=>Double=a=>a*3.0
test:Int=>Double
或者:
scalascala>valb=2
b:Int=2
scala>deftest2:Int=>Double=b=>b*3.0
test:Int=>Double
至于rng的来源,请查看map2方法的scope中是否有满足需求(RNG类型)的变量、隐式值等...
知识点参考Scala的closure、implicitvalue等。
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 346 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信