有没有办法隐含地完成这项工作?

tsj*_*nsn 1 scala type-inference implicit

有没有办法在匹配之前调用x上的这个隐式方法来满足匹配的类型要求?

如果我直接调用它,它按预期工作,但我想知道是否可以推断出该调用.

object ImplicitTest extends App {
  implicit def denull[T<:Any](mightBeNull:T):Option[T] = {
    if (mightBeNull == null) None
    else Some(canBeNull)
  }

  var x:String = null
  x match {  //works if i do "denull(x) match {"
    case Some(str:String) =>
      println(str)
    case None => None
  }
}
Run Code Online (Sandbox Code Playgroud)

dre*_*xin 6

而不是denull你应该使用的方法Option.apply.它做同样的事情.应始终明确处理可能的空值!隐式转换很危险,对于必须使用代码的其他人来说可能会造成混淆.像这样做:

Option(x) match {}
Run Code Online (Sandbox Code Playgroud)

或者在大多数情况下甚至更好:

Option(x).fold { ... } { ... }
Run Code Online (Sandbox Code Playgroud)