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

Rag*_*dra 1 kotlin arrow-kt

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

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

val value1 = Some("val")

// No error
value1.getOrElse { true }
Run Code Online (Sandbox Code Playgroud)

这似乎不正确。我究竟做错了什么?

Ale*_*nov 5

这是因为Option协变的(你可以看到它的声明Option<out A>),所以value1一个Option<Any>{ true }被推断为() -> Any