当前位置: 首页 > 知识库问答 >
问题:

如果一个Elvis运算符的两个表达式的计算结果都为null,选择哪一个?

罗和煦
2023-03-14
var str: String? = null
str ?: null

当ran返回null,但是哪一个呢?我没有预见到这有什么实际的目的--我只是好奇而已。

共有1个答案

双子民
2023-03-14

你正在寻找的答案是右手边的值,这正是我们所期望的。这两个都是空的事实与他们被评估的顺序没有关系,Kotlin有一个契约并坚持它。

如果我在我的编辑器中键入您的代码,我会得到一个警告,“elvis运算符(?:)的右操作数如果为null则无用”,这在我看来是正确的。为了解决这个问题,让我们用返回null的函数代替左边和右边...

fun alwaysReturnsNull(log: String): String? {
    println(log)
    return null
}

val str: String? = alwaysReturnsNull("first") ?: alwaysReturnsNull("second")
println(str)

在本例中,输出是“First”,后跟“Second”,显示Kotlin按照您期望的顺序计算这些函数值:elvis的左手,然后是elvis的右手。

 类似资料:
  • 问题内容: 尝试通过一些非常有限的知识和经验来进行SQL查询。尝试了很多我通过搜索发现的内容,但没有得出我想要的结果。 我有四个表: 回复:KITS-[KIT_NO]和[ITEM_NO]都位于ITEMS表中。它们的串联是PK。 我想选择ORDERS,ORDERS.DATE,ORDER_DETAILS.ITEM_NO,ITEMS.DESC 没问题。一些简单的内部联接,我在路上。 困难在于在selec

  • 问题内容: 表格如下: 我想获取班级列表,以及每个班级-属于每个班级的学生人数。我怎样才能做到这一点? 问题答案: 您需要这样做-

  • 问题内容: 在Java中如何计算一个字符串表达式?,例如:”3+2” 问题答案: 使用JDK1.6,您可以使用内置的Javascript引擎。

  • 我有两个针对同一个表的select查询,这两个查询在select部分中都只包含一个< code>sum(),但是在< code>where子句中有所不同。我需要做的是对两个查询的结果求和。 查询示例: 我需要的是像这样的东西 其中选择和,如我的示例查询中所示。 我试着回答这个问题,但没能成功。我还尝试用替换字段,但这不起作用,因为不允许在中使用

  • 下面的代码通过使用特征向量作为容器或简单的C数组来实现相同的计算。它产生一个封闭的但不是位到位等效的结果。 最后的数学运算是。

  • 这看起来有点奇怪,因为orElse方法使用的变量不在lambda的范围内。我能知道最好的方法吗? 也许我应该说说为什么我选择了可选的。我希望我的团队的开发人员明白,即使字符串A是首选的,它可能是空的,并且必须处理,因为代码的这一部分是敏感的。字符串B仅用于记录的遗留部分。希望这能澄清我对这种方法的意图。