【问题标题】:Why can't Kotlin infer return type of a Boolean expression using ==?为什么 Kotlin 不能使用 == 推断布尔表达式的返回类型?
【发布时间】:2019-11-06 00:42:15
【问题描述】:

据我了解,Kotlin 应该能够根据函数体中使用的最后一个表达式推断函数的返回类型。

fun returnInt() {
    42 + 24
}

但是,当我创建一个期望相等 (==) 运算结果的函数时,例如:

fun returnBoolean() {
    someBool == otherBool
}

我收到以下警告:

未使用的等于表达式

我可以通过添加返回类型和返回语句来解决这个问题:

fun returnBoolean(): Boolean {
    return someBool == otherBool
}

但我只是想知道为什么returnBoolean() 得到一个“未使用的等于表达式”而returnInt() 没有。

【问题讨论】:

  • 我不知道 kotlin,但是您的 42 + 42 似乎无效,并且引发错误的第二段代码更正确。似乎使用{} 的定义,你需要一个明确的return
  • 你的第一个函数没有被推断为Int,Kotlin 推断为Unit

标签: kotlin warnings


【解决方案1】:

我傻了。

Kotlin 能够在函数声明中使用等号推断此类语句:

fun returnInt() =
    42 + 24


fun returnBoolean() =
    someBool == otherBool


作为 Kotlin 的初学者,我发现 returnInt() 没有收到警告很有趣,但是如果您尝试在运行时使用它(在我的例子中,我将它作为参数传递给 java.lang.String.format),它会抛出异常。

【讨论】:

  • 您的 returnInt 方法不返回 Int - 它只是将两个数字相加而对它们不做任何事情。 fun stuff() = ... 符号等于 fun stuff() { return ... }。在您的第一篇文章中的这两种情况下,您都缺少return
  • 调用returnInt 不应引发异常。你确定你将returnInt() 传递给String.format 而不是方法引用returnInt
猜你喜欢
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2021-03-28
相关资源
最近更新 更多