我发现自己编写的程序越来越像这样:
myList
.map(el => ...)
.filter(_....)
.map { el =>
...
...
}
.zipWithIndex
.foreach(println)
我的子程序通常完全由这样的代码块组成。我从来没有打算将我的编码风格改为这个,它只是在我越来越多地使用Scala时自然而然地发生了。
说这样的代码用" monadic style"?是否正确?我对monad是什么有一个模糊的理解,我在这里使用Scala的集合,这些似乎是monadic类型。另一方面,我不是自己创建任何monadic类型,我只是使用它们。换句话说,当我只想说我以take_something.change_it.change_it.use_it
风格编程时,是否可以将其称为" monadic style"?
答案 0 :(得分:3)
我会说编程就是使用monad的结果,但我只是将它描述为完全编程的monadic风格,如果你真的依赖monad编程完全没有副作用,使用IO monads和State monads之类的内容。您最终会得到一大堆嵌套(而不是链接的)map
,flatMap
和filter
s。 Scala for...yield
构造有助于组织与多个嵌套monad一起使用的代码。您可能会发现这本书Functional Programming in Scala很有趣,因为我真的很喜欢这种风格。
在一个monadic类型中使用链式转换的较小意义上,你的例子肯定是monadic。这种模式在很多代码中使用,我不一定要描述为" monadic",有时称为method cascading或fluent pattern。