在Scala中返回值本身用于默认模式匹配

时间:2016-02-12 09:57:31

标签: scala pattern-matching

对于value: Any,我需要检查一个字符串案例 对于其他情况,应该返回value本身 什么是正确的语法:case _ => _ ?

def foo(value: Any) = value match {
  case x: String => if (x == "cond") None else x
  case _ => _ // Compiler -> Not found value x$1. Unbound placeholder parameter
}

2 个答案:

答案 0 :(得分:8)

只需使用一些(任意)标识符而不是_

def foo(value: Any) = value match {
  case x: String => if (x == "cond") None else x
  case other => other
}

但是,如果您在其他情况下未返回None,则在某些情况下返回Some并非最佳做法。更正确的版本是:

def foo(value: Any) = value match {
  case "cond" => None
  case other => Some(other)
}

然后在任何一种情况下,你都有一个Option类型的对象。

答案 1 :(得分:4)

简单就是这个简单的if-else表达式,

def foo(value: Any) = if (value == "cond") None else Some(value)

有点复杂,

def foo(value: Any) = Option(value).find( _ != "cond" )

仅在None等同value时才提供"cond"。考虑如下使用for comprehension,

def foo(value: Any) = for (v <- Option(value) if v != "cond") yield v