Tag: 返回

打破kotlin中的匿名函数

创建一个测试用例来表示我正在尝试做什么。 我无法弄清楚如何“停止”继续在匿名函数中工作。 在下面的例子中,如果答案是正确的,我想跳出“苹果”部分。 下面的代码不能编译,因为它说的是返回@苹果而不是返回@香蕉这是唯一有效的选项,但我写下来试图解释我想要达到的目标,并更好地理解如何去做类似这个。 class FunctionBreakingTest { @Test fun stopInMiddleOfLambda() { var answer = “wrong” doStuff apple@ { doStuff banana@ { answer = “correct” if (answer == “correct”) { return@apple } answer = “wrong” } answer = “wrong” } assertEquals(“correct”, answer) } private fun doStuff(foo: () -> Unit) = foo.invoke() }

如何将函数输出转换为Kotlin单元

我在Kotlin函数中遇到麻烦,应该返回Unit,但是由于使用了另一个返回布尔值的函数,会出现types不匹配的情况。 这是一个人为的例子: fun printAndReturnTrue(bar: Int): Boolean { println(bar) return true } fun foo(bar: Int): Unit = when(bar) { 0 -> println(“0”) else -> printAndReturnTrue(bar) } 在这里,我其实并不关心printAndReturnTrue返回一个布尔值的事实。 我只是想让富美执行副作用的操作。 但编译器警告types不匹配:我的else应该返回一个Unit值。 有没有一种很好的方法将值转换为Unit ? 我看到的最简单的解决方案是: fun foo(bar: Int): Unit = when(bar) { 0 -> println(“0”) else -> { printAndReturnTrue(bar) Unit } } 要么: fun foo(bar: Int): Unit = when(bar) […]

为什么“返回”在Kotlin中返回“返回”?

这个问题可能听起来很愚蠢,但是没有错字。 fun test(): Any { return return true } 这在Kotlin中实际上是可能的。 虽然编译器警告 无法访问的代码 为外面的回报。 但这只是一个警告。 我不想比较Java和Kotlin,但我有兴趣是否可以在Java中使用。 public class Test { // … static int test() { return return 1; } } 它不是! /Test.java:8:错误:expression式的非法开始 返回1; ^ /Test.java:8:错误:不是一个语句 返回1; ^ 2错误 为什么Kotlin是这样设计的?