Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 从函数中检索返回类型_Kotlin - Fatal编程技术网

Kotlin 从函数中检索返回类型

Kotlin 从函数中检索返回类型,kotlin,Kotlin,我正在研究编译器如何根据返回语句推断函数的返回类型。然后我遇到了令我困惑的事情 我有这个Kotlin函数: fun ambigousTypeEval(sport: String) = when (sport) { "cricket" -> -1 else -> "I like $sport" } 它可以返回Int或String,因此它的编译时类型是Any(即,如果调用此函数并将其返回值赋给变量,则该变量的类型将是Any) 然而,当我在kotlinc REPL中加载该代码并检

我正在研究编译器如何根据返回语句推断函数的返回类型。然后我遇到了令我困惑的事情

我有这个Kotlin函数:

fun ambigousTypeEval(sport: String) = when (sport) {
  "cricket" -> -1
  else -> "I like $sport"
}
它可以返回
Int
String
,因此它的编译时类型是
Any
(即,如果调用此函数并将其返回值赋给变量,则该变量的类型将是
Any

然而,当我在kotlinc REPL中加载该代码并检查其类型时,我会得到不同输入的不同类型

>>> examples.ambigousTypeEval("cricket")::class
examples.ambigousTypeEval("cricket")class kotlin.Int

>>> examples.ambigousTypeEval("football")::class
examples.ambigousTypeEval("football")class kotlin.String
这是怎么回事

EDIT:为了清楚起见,我想知道如何找出函数的编译时类型。也就是说,我希望看到如下内容:
(String)->Any

对编辑进行寻址:

您必须首先获得对函数的引用:

val func = examples::ambiguousTypeEval
这是一个例子

现在只需检索其:

在这种情况下,返回类型将是与
Any
相对应的
KType

您可以通过。

寻址编辑来检索参数类型:

您必须首先获得对函数的引用:

val func = examples::ambiguousTypeEval
这是一个例子

现在只需检索其:

在这种情况下,返回类型将是与
Any
相对应的
KType


您可以通过检索参数类型。

查看我的问题编辑,希望能澄清我的预期结果。@ThomasCook我在回答的顶部添加了更多内容,这就是我想要的。对不起,让人困惑的问题,请参阅我的问题编辑,希望能澄清我的预期。@ThomasCook我在回答的顶部添加了更多内容这就是我想要的。对不起,这个问题让人困惑,