Scala 中的类型别名

用户3407764

我实际上不知道如何称呼这个问题。标题是我能想到的最好的。

我们目前正在学校使用 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

jwvh

好的,我去试试。

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 => ...您是对的,它xList. 在 的情况下RandrngRNG稍后在代码中的某个时间/某个地方提供的值(类型的替代品

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章