【发布时间】:2015-03-01 07:09:17
【问题描述】:
我正在使用此代码:
case class State[S, +A](run: S => (A, S)) {
...
def flatMap[B](f: A => State[S, B]): State[S, B] = State(s => {
val (a, s1) = run(s)
f(a).run(s1)
})
...
}
这是处理纯功能状态的抽象,来自FP in Scala 的第 6 节。 run 是函数参数,它接受一个状态并发出一个值和新状态的元组。
我的问题与本节中的 s => 语法有关:
... B] = State(s => { ...
这似乎是在使用State“构造函数”(即apply)来构建一个新的State 对象。但是s 代表什么?它是代表任何状态实例的“匿名”状态吗?如果是这样,它与this 有何不同?还是s对应run的入参即S from:
... (run: S => ....
为什么我要使用构造函数来定义函数?请注意,flatMap 定义的最后一个符号是) 而不是},它关闭了State apply 构造函数。
这个场景和标准有点不同
case class Person(name: String)
情景,所以我想我会问...
【问题讨论】:
标签: scala