scala – Kotlin:围绕几个表达式(或语句)的卷曲括号
我认为这个问题与
Kotlin function declaration: equals sign before curly braces有些相关
在Scala中,每个语句都是一个表达式(可能带有Unit类型).如果我们用大括号括起多个表达式,那么最后的表达式是花括号部分的实际值.因此, // Scala val a = { val b = 1 val c = b + b c + c } println(a) a的类型是Int,代码打印值4. 然而,在Kotlin,这有些不同. // Kotlin val a = { val b = 1 val c = b + b c + c } println(a) a的类型是() – > Int和代码打印Function0< java.lang.Integer>,这意味着结果类型为Int的0-ary函数对象. 因此,如果我们要打印值4,我们需要执行println(a()). 事实上,Kotlin中的表达式{}是一个函数() – > (). 我在Kotlin官方参考页面中找不到关于此的解释.如果没有参数列表或 – >,花括号会产生一个函数吗? 当我使用Scala时,我会编写许多代码,就像第一个代码一样.但是,在Kotlin中,它创建了一个函数对象,我们必须调用该函数,这可能是循环或递归中的开销. >有没有关于这件事的文件:只是花括号制作一个功能对象? 编辑 这是多次迭代的实际代码: 在Java中 while ((count = input.read(data,BYTE_BLOCK_SIZE)) != -1) { .... } 在斯卡拉 while { count = input.read(data,BYTE_BLOCK_SIZE) count != -1 } { .... } 在Kotlin while ({ count = input.read(data,BYTE_BLOCK_SIZE) count != -1 }()) { ... } 你可以看到,只有Kotlin生成很多函数对象并调用它们. 解决方法
在Kotlin {}中始终是lambda表达式或语法结构的一部分,如while(true){}.可能与Scala不同,但很容易掌握.
你可能想要的是: val a = run { val b = 1 val c = b + b c + c } println(a) Kotlin没有“任何地方的代码块”的内置概念.相反,我们在上面的示例中使用标准函数 – 帮助程序,例如run. https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/run.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |