繁体   English   中英

将命令式转换为功能样式范例

[英]Converting Imperative Expressions to Functional style paradigm

我的代码中包含以下Scala代码段。 我无法将其转换为功能样式。 我可以在代码的其他位置执行此操作,但无法将以下内容更改为功能。 问题是,一旦代码用尽了所有模式匹配选项,那么只有它应该发回“ NA”。 下面的代码可以做到这一点,但是它不是函数式的(产量)

var matches = new ListBuffer[List[String]]()
      for (line <- caselist){
        var count = 0
        for (pat <- pattern if (!pat.findAllIn(line).isEmpty)){
          count += 1
          matches += pat.findAllIn(line).toList
        }
        if (count == 0){
          matches += List("NA")
        }
       }
      return matches.toList
     }

您的问题尚未完全解决,因此无法确定,但我相信以下内容可以解决问题:

  for {
    line <- caselist
    matches = pattern.map(_.findAllIn(line).toList)
  } yield matches.flatten match {
    case Nil => List("NA")
    case ms => ms
  }

这应该做的工作。 使用foreachfilter生成匹配项并检查以确保每行都匹配。

caseList.foreach{ line =>
  val results = pattern.foreach ( pat => pat.findAllIn(line).toList )
  val filteredResults = results.filter( ! _.isEmpty )
  if ( filteredResults.isEmpty ) List("NA")
  else filteredResults
}

功能性并不意味着您不能拥有中间命名的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM