了解Scala中的Option.flatten
发布时间:2020-12-16 08:49:56 所属栏目:安全 来源:网络整理
导读:我注意到Option.flatten是 defined如下: def flatten[B](implicit ev: A : Option[B]): Option[B] = if (isEmpty) None else ev(this.get) 什么是ev在这里?什么是A:选项[B]是什么意思?它是干什么用的 ? 解决方法 这是限制针对特定类型执行某些方法的常
我注意到Option.flatten是
defined如下:
def flatten[B](implicit ev: A <:< Option[B]): Option[B] = if (isEmpty) None else ev(this.get) 什么是ev在这里?什么是A<:<选项[B]是什么意思?它是干什么用的 ? 解决方法
这是限制针对特定类型执行某些方法的常见做法.实际上,<:<是scala.Predef中定义的类型,如下所示:
@implicitNotFound(msg = "Cannot prove that ${From} <:< ${To}.") sealed abstract class <:<[-From,+To] extends (From => To) with Serializable ... implicit def conforms[A]: A <:< A = ... 因此,只有当A是B的子类型时,才能解析类型<:< [A,B]的隐式. 在这种情况下,只有当Option包含在另一个Option中时才能解析它.在任何其他情况下,将发生编译错误: scala> Option(42).flatten <console>:8: error: Cannot prove that Int <:< Option[B]. Option(42).flatten ^ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |