gpt4 book ai didi

android - Kotlin - Elvis 运算符的不当行为

转载 作者:行者123 更新时间:2023-11-29 14:29:32 27 4
gpt4 key购买 nike

Elvis Operator 时遇到了一个有趣的案例?:不当行为。

想象一下有这样的东西

base64ToBmp(str)?.let { <1> } ?: run { <2> }

并在一些旧手机和模拟器上看到 <1><2>代码被调用。

  • <1>正在显示位图

  • <2>显示错误

这就像位图解析失败一样。

有人见过这样的行为吗?有合乎逻辑的解释吗?

最佳答案

let 返回指定功能 block 的值。

所以合乎逻辑的解释是<1>返回 null .在这种情况下,整个表达式 base64ToBmp(str)?.let { <1> }变成 null并且将评估 elvis 运算符的右侧(即 run { <2> })。

一个非常简单的复制方法是:

"foo"?.let { print("<1>"); null } ?: print("<2>")
// Prints <1><2>

根据您的实际用例, apply also (两者都返回上下文对象本身)可能是合适的(请注意,对于 apply,对象引用作为 this 而不是 it 传递):

"foo"?.apply { print("<1>"); null } ?: print("<2>")
// Prints <1>

关于android - Kotlin - Elvis 运算符的不当行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58324862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com