小编Lio*_*ort的帖子

Kotlin中无限序列的递归定义

我正在试验Kotlin序列,特别是那些不是前一个值的简单计算的更复杂的序列.

我想定义的一个例子是所有素数的序列.

定义下一个素数的一种简单方法是下一个整数,它不能被序列中任何先前的素数整除.

在Scala中,这可以转换为:

def primeStream(s: Stream[Int]): Stream[Int] = s.head #:: primeStream(s.tail filter(_ % s.head != 0))
val primes = primeStream(Stream.from(2))

// first 20 primes
primes.take(20).toList 
Run Code Online (Sandbox Code Playgroud)

我无法将其翻译成Kotlin.在scala中它可以工作,因为你可以传递返回一个将被懒惰评估的序列的函数,但我不能在Kotlin中做同样的事情.

在Kotlin,我试过了

fun primes(seq: Sequence<Int>):Sequence<Int> = sequenceOf(seq.first()) + primes(seq.drop(1).filter {it % seq.first() != 0})
val primes = primes(sequence(2) {it + 1})

primes.take(20).toList()
Run Code Online (Sandbox Code Playgroud)

但这显然不起作用,因为函数被立即评估并导致无限递归.

kotlin

9
推荐指数
1
解决办法
1469
查看次数

带有默认值的Kotlin数据类上的Spring构造函数注释

要使用spring持久性但保持不可变类型,我已将PersistenceConstructor注释添加到我的数据类中.这告诉spring在从数据库加载类时使用该构造函数.

但是,我在找到构造函数时遇到问题.

data class MyData @PersistenceConstructor constructor(@Id val id: Int? = null, val a:String)
Run Code Online (Sandbox Code Playgroud)

这在我的机器上100%的时间工作,但是当部署到heroku时它始终失败.

看起来,通过让参数kotlin的默认值生成多个构造函数,问题是每个构造函数都会获得应用于它们的注释,因此它只是运气(或特定于jdk实现),这是一个春天选择的.默认的参数没有名称,因此Spring不知道如何处理它.

我真正的构造函数比这个大,所以没有默认值会很痛苦.有没有办法让注释只应用于没有默认值的构造函数?

spring kotlin

4
推荐指数
2
解决办法
2744
查看次数

标签 统计

kotlin ×2

spring ×1