gpt4 book ai didi

scala - 为什么 Option 的 orNull 方法有这个多余的隐式参数?

转载 作者:行者123 更新时间:2023-12-02 07:31:46 26 4
gpt4 key购买 nike

我想知道 (implicit ev: Null <:< A1) 的原因是什么?这里:

sealed abstract class Option[+A] extends Product with Serializable { 
def orNull[A1 >: A](implicit ev: Null <:< A1): A1 = this getOrElse null
...
}

不会

def orNull[A]: A = this getOrElse null

考虑到它甚至似乎不适用于像

这样的值类型,就足够了
Option(1).orNull

但是

Option(1).getOrElse(null)

有吗?

Optionsource code

最佳答案

并非所有 scala 类型都可以为 null。特别是,Any 有两个子项:AnyRef 和 A​​nyVal。 AnyRef 可以处理 null 类型。 AnyVal 类型可以是 JVM 上的基元,因此不能为 null。隐含的是延迟类型检查,允许 Option[String] 使用 orNull 但不允许 Option[Int]。

注意:Int 被装箱/拆箱的对象/基元的这种二分法在 Scala 中有非常奇怪的表现,例如 null.asInstanceOf[Int] == 0//true。

关于scala - 为什么 Option 的 orNull 方法有这个多余的隐式参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315361/

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