对于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
}
答案 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