我有这种非常频繁的代码类型:
def writeOne(s: S, a: A) : S = …
def writeAll(init: S, l: List[A]) = l.foldLeft(init)(writeOne)
def process = {
val as : List[A] = …
val init : S = new S()
writeAll(init, as)
}
在代码设计方面,有没有更好的方法来编写它?
答案 0 :(得分:1)
您是否愿意使用Scalaz?状态monad可以帮助您封装通过这些操作线程化状态的一些业务:
import scalaz._, Scalaz._
def writeOne(a: A): State[S, Unit] = State.modify(
s => ??? // Do something with `s` and `a`, returning the new `S`.
)
def writeAll(l: List[A]): State[S, Unit] = l.traverseS_(writeOne)
def process = {
val as: List[A] = ???
val init = new S()
writeAll(as).run(init)
}
我发现你的代码特别冗长或难以阅读,但如果你觉得你写的太多方法需要一些参数s: S
并返回一个新的S
,州monad是一种清理事物的方法。