gpt4 book ai didi

scala - 了解Scala中的Option.flatten

转载 作者:行者123 更新时间:2023-12-04 03:04:10 30 4
gpt4 key购买 nike

我注意到Option.flattendefined,如下所示:

def flatten [B](隐式ev:A <:<选项[B]):选项[B] =
if(isEmpty)其他ev(this.get)

什么是evA <:< Option[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
^

关于scala - 了解Scala中的Option.flatten,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511483/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com