我好像真的不理解地图和平面地图。我不能理解的是 for 理解为什么是一系列对 map 和 latMap 的嵌套调用。下面的例子来自 Scala 中的函数式编程
def bothMatch(pat:String,pat2:String,s:String):Option[Boolean] = for {
f <- mkMatcher(pat)
g <- mkMatcher(pat2)
} yield f(s) && g(s)
翻译过来就是
def bothMatch(pat:String,pat2:String,s:String):Option[Boolean] =
mkMatcher(pat) flatMap (f =>
mkMatcher(pat2) map (g => f(s) && g(s)))
MkMatcher 方法的定义如下:
def mkMatcher(pat:String):Option[String => Boolean] =
pattern(pat) map (p => (s:String) => p.matcher(s).matches)
模式法如下:
import java.util.regex._
def pattern(s:String):Option[Pattern] =
try {
Some(Pattern.compile(s))
}catch{
case e: PatternSyntaxException => None
}
如果有人能够在这里阐明使用 map 和 latMap 背后的基本原理,那将是非常棒的。