我实际上并不知道该怎么称呼这个问题。提出的标题是我能想到的最好的。
我们目前正在学校的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
在这里是什么。
我不问兰德[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)
在上面的地图示例中,非常很容易在概念上理解函数参数x =>
给出的接收参数f
将被解释为每个单独的元素列表l
。
我在rng =>
中专门寻找unit
的概念性连接。
答案 0 :(得分:4)
好的,我已经去了。
def unit[A](a: A): Rand[A] = rng => (a, rng)
这里unit
接受一个参数并构建一个元组的一半。它返回构建已完成元组的方法。
val uHalf = unit('q') // this is the "a" parameter
现在,由于类型Rand
的定义(uHalf
类型为Rand
),元组的另一半只能是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
类型)的替代。