如何让编译器说出它认为表达式是什么类型?

问题描述 投票:1回答:1

是否有一种方法可以让Kotlin编译器确切地告诉我它认为表达式是什么类型?所以例如给定(1 + 2),它将打印Int

[更好的例子:(if (args.isEmpty()) 1 else 2.0)应该显示Any,因为编译器认为这是该术语的类型,因为在编译时它可以做的最好的就是推断IntDouble的最具体的超类型。] >

是否有一种方法可以让Kotlin编译器确切地告诉我它认为表达式是什么类型?所以例如给定(1 + 2),它将打印Int。更好的示例:(if(args.isEmpty())1 else 2.0)应该...

kotlin types type-inference diagnostics
1个回答
0
投票
fun main() {
    println(typeName { if (true) 1 else 2.5 }) // Any
    println(typeName { 1 + 2 }) // Int
    println(typeName { f() }) // String
}


fun f(): String = TODO() // throws NotImplementedError

inline fun <reified T> typeName(noinline block: () -> T): String? = T::class.simpleName
© www.soinside.com 2019 - 2024. All rights reserved.