我想知道是否有一个构造,Option.fold
这将使以下None.**.asInstanceOf[Option[String]**
不必要:
def getHiveDir(sqlc: SQLContext, tname: String, partColVals: Seq[(String, String)]): Option[String] = { getHiveDir(sqlc, tname).fold(None.asInstanceOf[Option[String]]) { tloc => // some stuff } Some(someString) }
目前,上面.asInstanceOf[Option[String]]
是必需的,或者发生编译错误:None不被识别为Option[String]
如何重新安排上面的代码以避免额外的演员?
选择你最喜欢的:
scala> Option.empty[String] res1: Option[String] = None scala> None: Option[String] res2: Option[String] = None scala> None.asInstanceOf[Option[String]] res3: Option[String] = None
您还可以明确定义类型参数fold
:
scala> val o: Option[Int] = None o: Option[Int] = None scala> o.fold[Option[Int]](None)(_ => Some(2)) res5: Option[Int] = None
在某些情况下,类型推断只是没有足够的信息来确定类型.它发生在像Haskell这样的其他语言中.通常的方法是帮助它,:
或者通过显式传递类型参数来指定类型,如上例所示.