scala 一个语法问题
如题, 下面这个map2的方法声明理解存在问题,不理解rng这个地方的值到底是怎么传入的,如果这是scala的lambda表达式,那么rng的值是如何来的呢
附上 Rand 的定义
type Rand[+A] = RNG => (A, RNG)
def map2[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)
}
def both[A,B](ra: Rand[A], rb: Rand[B]): Rand[(A,B)] =
map2(ra, rb)((_, _))
推倒绿坝娘
10 years, 2 months ago
Answers
在这个例子中,还没有地方传入rng的值。
你的代码不妨这么理解:
scala
def map2[A,B,C](ra: Rand[A], rb: Rand[B])(f: (A, B) => C): Rand[C] = { def result(rng: RNG): (C, RNG) = { val (a, r1) = ra(rng) val (b, r2) = rb(r1) (f(a, b), r2) } return result }
其实你写的代码是这段代码的一个语法甜品而已。看到这段代码,就可以知道 rng 只是你返回值(是一个函数)中的形参罢了。后续你就可以调用 result(rng)了,这里rng就是调用者负责的内容了。
黑社会大流氓
answered 10 years, 2 months ago
在REPL中做如下测试:
scala
scala> implicit val a = 1 a: Int = 1 scala> def test : Int => Double = a => a * 3.0 test: Int => Double
或者:
scala
scala> val b = 2 b: Int = 2 scala> def test2 : Int => Double = b => b * 3.0 test: Int => Double
至于 rng 的来源,请查看 map2 方法的scope中是否有满足需求(RNG类型)的变量、隐式值等...
知识点 参考 Scala 的 closure、implicit value 等。
小A真是欠草
answered 10 years, 2 months ago