gpt4 book ai didi

kotlin - 为什么 Kotlin 初始化 block 中不允许 `return`?

转载 作者:IT老高 更新时间:2023-10-28 13:31:41 26 4
gpt4 key购买 nike

如果我编译这个:

class CsvFile(pathToFile : String)
{
init
{
if (!File(pathToFile).exists())
return
// Do something useful here
}
}

我收到一个错误:

Error:(18, 13) Kotlin: 'return' is not allowed here

我不想和编译器争论,但我很好奇这个限制背后的动机。

最佳答案

这是不允许的,因为对于几个 init { ... } block 可能有违反直觉的行为,这可能会导致细微的错误:

class C {
init {
if (someCondition) return
}
init {
// should this block run if the previous one returned?
}
}

如果答案为“否”,代码会变得脆弱:在一个 init block 中添加 return 会影响其他 block 。

允许您完成单个 init block 的可能解决方法是使用带有 lambda 和 a labeled return 的函数。 :

class C {
init {
run {
if (someCondition) return@run
/* do something otherwise */
}
}
}

或者使用明确定义的secondary constructor :

class C {
constructor() {
if (someCondition) return
/* do something otherwise */
}
}

关于kotlin - 为什么 Kotlin 初始化 block 中不允许 `return`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46244409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com