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