2012-05-16 37 views
1

我是功能編程的新手,而且正在閱讀本書。它基本上說,如果你的代碼包含「var」,這意味着你仍然在以一種迫切的方式進行操作。我不知道如何將我的代碼更改爲功能方式。請建議。如何將此代碼更改爲scala中的函數式編程?

所以基本上這段代碼所做的就是處理一些文本並使用正則表達式從「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 
 

回答

7

嘗試用

val list = pattern.findAllIn(taggedText).matchData.map(m => m.group(1)).toList 

更換中間部分可以寫m => m.group(1)_.group(1)如果你想。

+3

作爲一個更一般的規則,在功能上建立一個數據結構Scala通常最好使用「map」,「flatMap」或「fold」來按難度遞增的順序完成。這些變體(「collect」,「groupBy」,「foldMap」)有一些變體,在某些情況下可能很方便,但作爲一般規則,「map」,「flatMap」和「fold」可以讓你在需要的地方走。 –

+1

如果這些方法對你來說是新的,我建議讓步。您可以使用for理解併產生結果集合。在幕後,yield將被轉換爲map,flatmap,filter等等。 –

相關問題