我实际上不知道如何称呼这个问题。标题是我能想到的最好的。
我们目前正在学校使用 Scala 进行函数式编程,并且时常有一些实例,我习惯的事物的方式没有意义......一个特定的例子是这样的:
type Rand[+A] = RNG => (A, RNG)
val int: Rand[Int] = _.nextInt
def unit[A](a: A): Rand[A] =
rng => (a, rng)
我们在这里处理状态,试图消除每次我们使用 RNG 特征生成新随机数时必须将新状态转移到每个函数的重复。
我的问题是这样的:
lambda 函数表达式定义了谓词“ rng =>
”,用作我们状态的占位符。通常,该谓词定义的内容很清楚,例如List.map(x => x)
其中 x 是列表的每个元素。但我不清楚rng
这里是什么。
编辑:我想有些人不明白这个问题,所以我会在这里给出一些进一步的例子来澄清......
我不是在问 Rand[A] 代表什么。我在问收到的参数rng =>
应该被解释为......例如
def map[A,B](l: List[A])(f: A => B): List[B] = ...
val l = List(1,2,3,4,5)
// l.map(x => x+1) -> List(2,3,4,5,6)
在上面的 map 示例中,从概念上很容易理解x =>
函数参数给出的接收参数f
将被解释为 list 的每个单独元素l
。
我特别在寻找与rng =>
in 的这种概念联系unit
。
好的,我去试试。
def unit[A](a: A): Rand[A] = rng => (a, rng)
这里unit
接受一个参数并构建元组的一半。它返回构建完整元组的方法。
val uHalf = unit('q') // this is the "a" parameter
现在,由于 type 的定义Rand
(并且uHalf
是 type Rand
),元组的另一半只能是 type RNG
,这在您的代码示例中未定义。但是假设您有一个方便blob
的类型RNG
。
val tup = uHalf(blob) // this is the "rng" parameter
现在你有了元组('q', blob)
。
在示例中List(3,2,1).map(x => ...
,您是对的,它x
是List
. 在 的情况下Rand
,rng
是RNG
稍后在代码中的某个时间/某个地方提供的值(类型)的替代品。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句