从另一个Kotlin函数返回一个递归函数

这是从Coursera的Scala MOOC中取得的Kotlin等价物。 它返回一个函数,将给定的映射器(f)应用于范围(a..b) fun sum(f: (Int) -> Int): (Int, Int) -> Int { fun sumF(a: Int, b: Int): Int = if (a > b) 0 else f(a) + sumF(a + 1, b) return sumF } 但IntelliJ显示这些错误。 我怎样才能从这里返回的function。

有没有办法使用Gradle将Kotlin类编译为JavaScript?

我正在使用Kotlin Gradle插件构建一个项目。 一般来说,我的目标是JVM,但将项目的一部分编译为JavaScript将会非常有用。 我知道在使用IntellJ插件构建项目时(如在浏览器博客文章中写入Kotlin中所述 ),项目可能会定位JavaScript,但是如何使用Gradle来实现呢? 把项目分成几个gradle模块,我很确定。

当我在Kotlin中使用Elvis操作时,可以添加回报吗?

我已经在http://mings.in/2017/03/12/Kotlin-Null-Safety.html上读过Elvis Operator 代码A和代码C是可以的,但是代码B是错误的(“types不匹配:推断types是Int但是Unit是预期的”),为什么? 代码A override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val b: String? = “hello” val l = b?.length ?: -1 } 代码B override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val b: String? = “hello” val l = b?.length ?: return -1 } 代码C fun getLength(b: String?): Int { val l = b?.length ?: […]

Kotlin函数语法

我正在做Kotlin Koans测试,以便熟悉Kotlin。 在某个测试中,我必须重写compareTo方法。 在第一种情况下,一切都按预期工作 data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) { operator fun compareTo(other: MyDate)= when { year != other.year -> year – other.year month != other.month -> month – other.month else -> dayOfMonth – other.dayOfMonth } } 现在在第二种情况下,我正在写compareTo有点不同,我得到了大量的编译错误。 data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) […]

Kotlin:必需:kotlin.Boolean。 find:kotlin.Boolean?

我写了一个条件如下 if (subsriber?.isUnsubscribed && isDataEmpty()) { loadData() } 由于我的订户可能为空。 显示上面的标题错误。 所以我把它如下 if (subsriber?.isUnsubscribed as Boolean && isDataEmpty()) { loadData() } 它看起来不是很好。 有没有更好的方法来做到这一点?

Kotlin:types对的2个types参数对 – 如何声明Pair的types?

在Kotlin中,我怎样才能将这种types添加到一对颜色中: var pair = Pair(Color.RED, Color.WHITE) 上面的冒号后面会是什么? 我需要知道,因为我需要声明一个pegColours数组,但以下获取错误, 2 type arguments expected for class Pair 。 lateinit private var pegColours: Array

泛化参数和返回types的泛化方法

我有一个方法来转换ByteArray? 到base64 String? 所以如果参数为null输出也将为null 。 这是它的实现: fun toBase64String(array: ByteArray?): String? = if(array == null) null else Base64.getEncoder().encodeToString(array) 但是当我通过不可空的ByteArray方法返回String? 这是预期的。 有没有办法使其通用,这样的用例将是可能的: val base64 = toBase64String(ByteArray(4)) base64将是types的String而不是String? 因为争论是不可空的? 我刚刚开始与Kotlin合作,可能不知道可以使这成为可能的语言function。

具有回报价值的Kotlin协同程序

我想创建一个具有返回值的协程方法。 例如) fun funA() = async(CommonPool) { return 1 } fun funB() = async(CommonPool) { return 2 } fun sum() { launch { val total = funA().await() + funB().await() } } 如果我想要返回总和方法,我该怎么办? 喜欢, fun sum(): Int { launch { val total = funA().await() + funB().await() } return total }

合格它在kotlin

正如https://kotlinlang.org/docs/reference/this-expressions.html#qualified中的文档所述,可以使用合格的来指定要使用的外部上下文。 有没有什么办法it ? IntelliJ一直在说有一个sytax错误。

在导入中转义保留字

在Kotlin中使用Java类时,有时会使用kotlin中保留字的标识符。 java interop文档说你可以使用反引号(`)字符,但是这在导入中不起作用。 那么如何逃避保留字的导入。 例如tinkerpop库有一个名为’__’的类,但是这是一个Kotlin保留,所以如果我像下面导入它会给出一个错误。 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__ 我可以使用这样的通配符导入它: import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.* 但是因为我只使用一个类,所以Intellij的代码格式化程序将其替换为导致错误的以前版本的导入。 (我猜这也是intellij格式化程序中的一个bug) 对于建议使用反向工程的答案。 它不是。 即使在try.kotlinlang.org上也不能编译。 假定一个类定义为 package blah class `__` { } 这是用反引号导入时发生的情况。