1

我正在尝试使用 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)

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

val value1 = Some("val")

// No error
value1.getOrElse { true }

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

4

1 回答 1

5

这是因为Optionis协变的(你可以看到它被声明为Option<out A>,所以value1也是an并且被推断为 be 。Option<Any>{ true }() -> Any

于 2019-07-12T17:09:58.740 回答