如何将此代码更改为scala中的函数式编程?

toy*_*toy 1 functional-programming scala

我是函数式编程的新手,因为我正在读这本书.它基本上说如果你的代码包含"var",那就意味着你仍然在以命令的方式做.我不确定如何将代码更改为功能方式.请建议.

所以这个代码的基本操作就是使用一些文本来处理文本,并使用正则表达式从"taggedText"中提取特定文本,并将其添加到列表中并将列表转换为json.


    val text = params("text")
    val pattern = """(\w+)/ORGANIZATION""".r

    var list = List[String]()
    val taggedText = processText(text)
    pattern.findAllIn(taggedText).matchData foreach {
      m => list ::= m.group(1)
    }

    pretty(render(list)) // render to json

Lui*_*hys 7

尝试用中间部分替换

val list = pattern.findAllIn(taggedText).matchData.map(m => m.group(1)).toList
Run Code Online (Sandbox Code Playgroud)

您可以m => m.group(1)_.group(1)想要的那样书写.

  • 作为一个更一般的规则,在功能上构建数据结构Scala通常最好使用"map","flatMap"或"fold",以增加难度的顺序.这些("收集","groupBy","foldMap")有一些变体,在某些情况下可能很方便,但作为一般规则,"地图","flatMap"和"fold"可以让你到达你需要的地方走. (3认同)