Scala:Option.getOrElse(…)的默认返回类型
Scala类的函数Scala:Option.getOrElse(…)的默认返回类型,scala,types,Scala,Types,Scala类的函数getOrElse(…)的签名是 如果我用这个例子 val o1 = Option("Hi") val o2: Option[String] = Option(null) println(o1.getOrElse(() => "Else")) println(o2.getOrElse(() => "Else")) 我得到输出 Hi <function0> 我如何评估结果,为什么不自动评估 是默认值:⇒ B与默认值相同:()⇒ B?考虑一下: val
getOrElse(…)
的签名是
如果我用这个例子
val o1 = Option("Hi")
val o2: Option[String] = Option(null)
println(o1.getOrElse(() => "Else"))
println(o2.getOrElse(() => "Else"))
我得到输出
Hi
<function0>
我如何评估结果,为什么不自动评估
是默认值:⇒ B
与默认值相同:()⇒ B
?考虑一下:
vale:Function0[String]=()=>“Else”
然后你可以写:
println(o1.getOrElse(e))//Hi
println(o2.getOrElse(e))//
println(o2.getOrElse(e())//Else
println(o2.getOrElse((()=>“Else”)())//Else
- 默认情况下:⇒ B与默认值相同:()⇒ B
()=>T
,与Function0[T]
相同
当您使用o1.getOrElse(()=>“Else”)
时,您使用的是异构类型,因此Scala会找到最不常见的超类型,在本例中是Any
val orElse: Any = o1.getOrElse(() => "Else")
o2.getOrElse(() => "Else")()
error: Object does not take parameters
o2.getOrElse( () => "Else")()
^
val orElse: Any = o1.getOrElse(() => "Else")