当前位置:  开发笔记 > 编程语言 > 正文

在scala中使用Option.fold时避免强制转换

如何解决《在scala中使用Option.fold时避免强制转换》经验,为你挑选了1个好方法。

我想知道是否有一个构造,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]

如何重新安排上面的代码以避免额外的演员?



1> yǝsʞǝla..:

选择你最喜欢的:

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这样的其他语言中.通常的方法是帮助它,:或者通过显式传递类型参数来指定类型,如上例所示.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有