相关疑难解决方法(0)

对flatMap/Map转换的理解感到困惑

我似乎真的不了解Map和FlatMap.我无法理解的是for-comprehension是如何嵌套调用map和flatMap的.以下示例来自Scala中的Functional Programming

def bothMatch(pat:String,pat2:String,s:String):Option[Boolean] = for {
            f <- mkMatcher(pat)
            g <- mkMatcher(pat2)
 } yield f(s) && g(s)
Run Code Online (Sandbox Code Playgroud)

翻译成

def bothMatch(pat:String,pat2:String,s:String):Option[Boolean] = 
         mkMatcher(pat) flatMap (f => 
         mkMatcher(pat2) map (g => f(s) && g(s)))
Run Code Online (Sandbox Code Playgroud)

mkMatcher方法定义如下:

  def mkMatcher(pat:String):Option[String => Boolean] = 
             pattern(pat) map (p => (s:String) => p.matcher(s).matches)
Run Code Online (Sandbox Code Playgroud)

模式方法如下:

import java.util.regex._

def pattern(s:String):Option[Pattern] = 
  try {
        Some(Pattern.compile(s))
   }catch{
       case e: PatternSyntaxException => None
   }
Run Code Online (Sandbox Code Playgroud)

如果有人能够阐明在这里使用map和flatMap背后的理由,那将会很棒.

monads scala map for-comprehension

82
推荐指数
3
解决办法
3万
查看次数

标签 统计

for-comprehension ×1

map ×1

monads ×1

scala ×1