当前位置:  开发笔记 > 编程语言 > 正文

如何调试Kotlin序列/集合

如何解决《如何调试Kotlin序列/集合》经验,为你挑选了2个好方法。

采用以下单行,可以表示为对集合或序列的一系列操作:

val nums = (10 downTo 1)
        // .asSequence() if we want this to be a sequence
        .filter { it % 2 == 0 }
        .map { it * it }
        .sorted()
        // .asList() if declaring it a sequence

println(nums)   // [4, 16, 36, 64, 100]

假设我想在每一步看到元素,它们将是(来自演绎):

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[10, 8, 6, 4, 2]
[100, 64, 36, 16, 4]
[4, 16, 36, 64, 100]

不幸的是,没有好的方法可以使用调试器对其进行调试,也可以记录这些值以供以后检查.使用良好的函数式编程结构,整个方法可以重写为这样的单个语句,但似乎没有好的方法来检查中间状态,甚至计数(10, 5, 5, 5这里).

调试这些的最佳方法是什么?



1> voddan..:

您可以使用记录中间值(列表)

fun  T.log(): T { println(this); this }

//USAGE:
val nums = (10 downTo 1)
    .filter { it % 2 == 0 }.log()
    .map { it * it }.log()
    .sorted().log()

这将按照需要工作,因为在您的示例中,您使用集合而不是序列.对于懒惰Sequence你需要:

// coming in 1.1
public fun  Sequence.onEach(action: (T) -> Unit): Sequence {
    return map {
        action(it)
        it
    }
}

fun  Sequence.log() = onEach {print(it)}

//USAGE:
val nums = (10 downTo 1).asSequance()
    .filter { it % 2 == 0 }
    .map { it * it }.log()
    .sorted()
    .toList()



2> Januson..:

在最新的Intellij Idea中添加断点时,您可以选择将其设置为不检查整个表达式,而只检查Lambda体.

在此输入图像描述

然后在调试本身中,您可以看到Lambda内部发生了什么.

在此输入图像描述

但这不是唯一的方法.您也可以使用Run to cursor(Alt + F9).

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有