簡體   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