2014-10-30 223 views
4

我有一個方法:比賽功能正在發生什麼?

def replaceSpecialSymbols(str: String): String = str.collect { 
    case '/'  => '-' 
    case _ => _ 
    }.toString 

WHE我嘗試建立這個代碼,我收到錯誤消息:「錯誤:未綁定的佔位符參數情況_ => _」

我知道,我可以使用全部替換。但我想知道這種情況下在Scala編譯器中發生了什麼。

謝謝。

+0

請查看此http://stackoverflow.com/questions/1025181/hidden-features-of-scala/1083523#1083523以瞭解與匿名函數相關的佔位符規則。 – hellraiser 2014-10-30 12:21:10

回答

5

使用case x => x - 問題已解決。此外,您可以使用map而不是collect,因爲它是詳盡的匹配。

或者,如果您只需要第一種情況,只需刪除該case _ => _並繼續使用collect

+0

Erik謝謝。我知道如何解決這個問題。我想知道爲什麼它不起作用。什麼是錯,爲什麼scala返回這個異常「未綁定的佔位符參數」。 – Nikolay 2014-10-30 12:46:20

+2

@尼克萊,它發生是因爲'_'在斯卡拉特別。特別是,模式匹配'_'意味着相應的模式應該被忽略 - 它不會將該值綁定到'_'標識符,所以將它作爲獨立標識符使用是沒有意義的。 – 2014-10-30 12:50:34

+0

弗拉基米爾謝謝你。這是一個很好的解釋。你能像獨立答案一樣發佈嗎? – Nikolay 2014-10-30 13:00:12