如何调试Kotlin序列/集合

采取以下一行,可以表示为一个集合或序列上的一系列操作:

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)。

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

2 Solutions collect form web for “如何调试Kotlin序列/集合”

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

 fun <T> 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 <T> Sequence<T>.onEach(action: (T) -> Unit): Sequence<T> { return map { action(it) it } } fun <T> Sequence<T>.log() = onEach {print(it)} //USAGE: val nums = (10 downTo 1).asSequance() .filter { it % 2 == 0 } .map { it * it }.log() .sorted() .toList() 

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

在这里输入图像描述

然后在调试中你可以看到你的Lambda里面发生了什么。

在这里输入图像描述

但这不是唯一的方法。 您也可以使用运行光标(Alt + F9) 。

  • 如何从mvvm模式登录成功viewmodel启动活动
  • Kotlin / Native - windows上的cinterop
  • 如何模拟返回Observable的被动库
  • 如何做一个组,并使用RxJava和Kotlin收集?
  • Kotlin与Spring DI:lateinit属性尚未初始化
  • Kotlin班级代表团的意外行为
  • kotlin RecyclerViewAdapter IndexOutOfBoundException
  • Kotlin注释IntDef
  • IllegalStateException:parcel.readString()不能为null
  • 什么? 在Kotlin中是否指派任务的左侧?
  • 将postgresql查询结果返回给一个函数
  • Kotlin language will be the best programming language for Android.