Kotlin arrow.kt - Option.getOrElse 正在接受 T 以外的其他类型

Kotlin arrow.kt - Option.getOrElse is accepting other type than T

我正在尝试使用 Option.getOrElse() 方法。

根据消息来源:

inline fun <R> fold(ifEmpty: () -> R, ifSome: (A) -> R): R = when (this) {
  is None -> ifEmpty()
  is Some<A> -> ifSome(t)
}

fun <T> Option<T>.getOrElse(default: () -> T): T = fold({ default() }, ::identity)

但是当我使用 returns 类型不是 T 的 lambda 调用 getOrElse 时,它​​不会显示任何编译时间或运行时错误。

val value1 = Some("val")

// No error
value1.getOrElse { true }

好像不太对。我做错了什么?

这是因为Optioncovariant (you can see it's declared as Option<out A>),所以value1也是一个Option<Any>{ true } 被推断为 () -> Any.