2014-10-30 224 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