gpt4 book ai didi

Scala Some v. Option

转载 作者:行者123 更新时间:2023-12-03 09:44:43 28 4
gpt4 key购买 nike

Some有什么区别和 Option ?

scala> Some(true)
res2: Some[Boolean] = Some(true)

scala> val x: Option[Boolean] = Some(true)
x: Option[Boolean] = Some(true)

scala> res2 == x
res3: Boolean = true

我看到了 Option(null)返回,而 Some(null)不会编译:
scala> val x = Option(null)
x: Option[Null] = None

scala> val x: Option[Boolean] = Some(null)
<console>:7: error: an expression of type Null is ineligible for implicit conversion
val x: Option[Boolean] = Some(null)
^

最佳答案

那么,Some扩展 Option ,因此它继承了除 get 之外的所有内容和 isEmpty (以及由案例类实现的其他一些方法)。
Option的伴生对象有特价apply处理方法null :

def apply[A](x: A): Option[A] = if (x == null) None else Some(x)

但是 Some.apply只是标准 apply为案例类生成的方法。
Some(null)在某些情况下会编译,但它的类型是 Some[Null] (或 Option[Null] ),只能在类型参数为 Option 时赋值是引用类型。
scala> val a = Some(null)
a: Some[Null] = Some(null)

scala> val b: Option[String] = Some(null)
b: Option[String] = Some(null)

您正在尝试分配 Some[Null]Option[Boolean] ,但是一个 Null不是 Boolean 的子类型, 因为 Boolean是值类型(底层的原始类型)并且不能保存值 null .

关于Scala Some v. Option,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27626237/

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