Tag: 科特林

被其他同伴对象引用的密封类对象神秘地变为空

有一个封闭的类: sealed class Alphabet(val name: String) { object A : Alphabet(“A”) object B : Alphabet(“B”) object C : Alphabet(“C”) object D : Alphabet(“D”) object E : Alphabet(“E”) companion object { val array = arrayOf(A, B, C, D, E) val list = listOf(A, B, C, D, E) } override fun toString(): String { return name } […]

CORUTTINE_SUSPENDED和suspendCoroutineOrReturn在Kotlin

kotlin中的协程的概念是抽象暂停和回调的概念,并写出简单的顺序代码。 如果协程暂停或不在线,则无需担心,与线程类似。 suspendCoroutineOrReturn和COROUTINE_SUSPENDED的用途是什么,在什么情况下你会使用它们?

返回块中的最后一个expression式

我正在学习新的,非常漂亮的Kotlin语言,一切似乎都是非常符合逻辑的。 我只发现了一件似乎是规则的任意例外的东西,而不是一个坚实的规则。 但也许我缺乏足够的理解背后的一些深层原因。 我知道,在if-else和when语句中有代码块,则返回最后一个expression式。 在下面的例子中,根据条件返回1或2 – 在我们的例子中返回1 。 val x = if (1 < 2) {println("something"); 1} else {println("something else"); 2} 另一方面,这不适用于任何代码块。 下一行将y分配给1但将整个代码块分配给一个lambda。 val y = {println(“something”); 1} 同样在函数体中,最后一个expression式不被返回。 这甚至没有编译。 fun z() : Int { println(“something”) 1 } 那么规则究竟是什么? 它是否真的如此随心所欲:如果在if-else或when用作expression式的语句中有一段代码,则返回该块中的最后一个expression式。 否则,最后一个expression式不会返回到外部作用域。 还是我错过了什么?

从另一个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。