Function Kotlin如何使用表达式体推断函数的返回类型

Function Kotlin如何使用表达式体推断函数的返回类型,function,kotlin,expression,type-inference,Function,Kotlin,Expression,Type Inference,如果函数只包含一个表达式,则可以从该表达式推断其返回类型。 听起来很简单: fun max(a: Int, b: Int) = if (a > b) a else b 在这种情况下,函数的返回类型将是Int 但下一个示例中的类型是什么 fun max(a: Int, b: Int) = if (a > b) a else true 推理只给出表达式可能值类型的最接近祖先 在这里,表达式可以产生一个布尔值或整数。本例中最接近的祖先是compariable,因此这是函数的返回类型 如

如果函数只包含一个表达式,则可以从该表达式推断其返回类型。 听起来很简单:

fun max(a: Int, b: Int) = if (a > b) a else b
在这种情况下,函数的返回类型将是Int

但下一个示例中的类型是什么

fun max(a: Int, b: Int) = if (a > b) a else true

推理只给出表达式可能值类型的最接近祖先

在这里,表达式可以产生一个
布尔值
整数
。本例中最接近的祖先是
compariable
,因此这是函数的返回类型

如果这些类型完全不相关,那么公共祖先将是
Any
,它位于所有不可为空类型的公共祖先中。
如果其中一个值也可以为null,则返回类型可能为
Any?
,它是Kotlin中所有类型的最终父级(类似于Java的
对象
)。

它是
Any
。你所要做的就是把代码写到任何IDE中,它会向你展示这一点。如果你想知道更多关于
任何
的信息,对不起,这毫无意义。最好的答案来自Kotlin编译器本身:尝试一下并报告。我猜呢?“此函数不正确。”@duffymo此函数正确,它可以正常编译和运行,在Java中相当于返回
Object
。此特定示例?不知道。但是返回多种类型的函数(在
Any
下)并不少见(并不是说它们是最好的解决方案,它们通常指向一种代码气味)。@duffymo哦,对了,你特别提到了max函数的目标。这当然没有道理。这只是一个关于类型推理行为的理论问题。我认为我们不应该试图在这里看代码的含义。