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 }
好像不太对。我做错了什么?
这是因为Option
是covariant (you can see it's declared as Option<out A>
),所以value1
是也是一个Option<Any>
和{ true }
被推断为 () -> Any
.
我正在尝试使用 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 }
好像不太对。我做错了什么?
这是因为Option
是covariant (you can see it's declared as Option<out A>
),所以value1
是也是一个Option<Any>
和{ true }
被推断为 () -> Any
.