Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Syntax kotlin:忽略let函数的返回类型?_Syntax_Kotlin - Fatal编程技术网

Syntax kotlin:忽略let函数的返回类型?

Syntax kotlin:忽略let函数的返回类型?,syntax,kotlin,Syntax,Kotlin,我可以用两种不同的返回类型创建相同的函数,并且无论选择哪个版本,都不会出现编译错误。这是一个bug还是某种语言特性 fun unitOrInt(): Int { return 1.let { 1 }} fun unitOrInt(): Unit { return 1.let { 1 }} fun unitOrInt() { return 1.let { 1 }} 1.let{1}的类型是IntnotUnit。为什么允许使用Unit版本?该let函数是通用的,它是内联的funt T

我可以用两种不同的返回类型创建相同的函数,并且无论选择哪个版本,都不会出现编译错误。这是一个bug还是某种语言特性

fun unitOrInt(): Int  { return 1.let { 1 }}
fun unitOrInt(): Unit { return 1.let { 1 }}
fun unitOrInt()       { return 1.let { 1 }}

1.let{1}
的类型是
Int
not
Unit
。为什么允许使用
Unit
版本?

let
函数是通用的,它是
内联的funt T.let(block:(T)->R):R
。调用此函数时,编译器将从封闭上下文推断类型参数

在函数的第一个声明中,编译器知道调用的预期类型是
Int
,因此它将R type参数推断为
Int
,并找到匹配类型的值作为lambda的最后一个表达式。在第二个声明中,预期的类型是
Unit
,因此编译器将R推断为
Unit
,并忽略lambda的最后一个表达式。在第三个声明中,没有返回类型声明,因此编译器替换
Unit
,并像第二个声明一样对其进行分析

为了更好地了解发生了什么,可以显式声明
let
的类型参数:

fun unitOrInt1(): Int  { return 1.let<Int, Int> { 1 }}
fun unitOrInt2(): Unit { return 1.let<Int, Unit> { 1 }}
fun unitOrInt1():Int{return 1.let{1}
fun unitOrInt2():单元{return 1.let{1}

函数是泛型的,它是
内联的funt T.let(block:(T)->R):R
。调用此函数时,编译器将从封闭上下文推断类型参数

在函数的第一个声明中,编译器知道调用的预期类型是
Int
,因此它将R type参数推断为
Int
,并找到匹配类型的值作为lambda的最后一个表达式。在第二个声明中,预期的类型是
Unit
,因此编译器将R推断为
Unit
,并忽略lambda的最后一个表达式。在第三个声明中,没有返回类型声明,因此编译器替换
Unit
,并像第二个声明一样对其进行分析

为了更好地了解发生了什么,可以显式声明
let
的类型参数:

fun unitOrInt1(): Int  { return 1.let<Int, Int> { 1 }}
fun unitOrInt2(): Unit { return 1.let<Int, Unit> { 1 }}
fun unitOrInt1():Int{return 1.let{1}
fun unitOrInt2():单元{return 1.let{1}