Tag: 内联

Kotlin实体types参数不智能投射

我正在试验设置未初始化的值,并试图让以下工作。 这主要是对物化仿制的权力(和限制)的好奇心。 我试图为数据类的可选参数提供默认值。 inline fun uninitialized(): T = when (T::class) { Long::class -> -1L // Type mismatch. Required: T Found: Long String::class -> “” // Type mismatch. Required: T Found: String // and so on… else -> throw UnsupportedOperationException(“No uninitialized value defined for ” + T::class) } data class Thing( var id: Long = uninitialized(), […]

在Kotlin中可变参数的lambdatypes?

是否有可能作为内联lambda参数接收一个函数types,它具有保证的返回typesR但可变参数的数量 ? 为简单起见,请考虑以下几点: inline fun Boolean?.tfn(tru:()->R, fls:()->R, nul:()->R) = if (this == null) nul() else if (this) tru() else fls() 让我们假设我有其他的内联函数,也可能是(A)->R或(A,B)->R或(A,B,C)->Rtypes的lambda参数 ,其参数我想传递给这个函数。 他们都将提供一个R但是他们都必须被调用来获得R ,而不知道这个函数中参数的数量/types/值。 有没有办法一般修改上面的function: 捕获返回R作为其输入的任何lambda参数的一般情况 避免对将调用此函数的其他内联函数进行任何更改 保持内联效率

包含generics的Kotlin函数的内联别名?

根据我在前面的问题中收到的建议,我用“别名”缩短了一些常用的外部函数(我不能控制的)的名字。 这对扩展function很好用; 不过,我还有一些顶级函数,我想要别名。 对于一个简单的例子,考虑generateSequence函数。 我想能够做到这一点: // DOES NOT COMPILE inline val seq:(()->T?)->Sequence get() = ::generateSequence …但是我不能这样做,因为在接收器types中必须使用generics,正如在这个答案中所解释的那样。 是否有任何其他方式来创建一个保留内联的顶级function(需要generics)的别名? 编辑:我试过使用Any? 和明星投影后发布的问题,但我仍然不认为这是一个很好的答案: inline val seq:(()->Any?)->Sequence get() = ::generateSequence 这似乎boptimalsu,因为它妥协对序列的元素types的types检查,正确的? 关于什么可以工作的其他答案/想法?

Kotlin实体types参数不能作为函数体中的types参数

Kotlin中的特定types参数可防止types参数擦除,并允许在运行时知道types参数。 这允许以下代码编译并按预期方式运行: inline fun isA(value: Any) = value is T 但是,当我尝试使用“T”作为types参数而不是独立时,我得到一个消息,它是一个擦除types。 以下代码仅供说明用途 : inline fun isListOfA(name: String): Boolean { val candidate = Class.forName(name) return candidate is List } 这是由于技术限制吗? 如果是这样,那么这个限制是什么?

Kotlin – 非法使用内联参数回调

我将我的lambda作为parameter function转换为inline function以提高性能。 我有typesMutableList Unit>variables的lambda list作为类中的数据成员。 当我尝试添加lambda parameter到list 。 Kotlin编译器说: 非法使用内联参数回调 这是代码 // Some code skipped object Odoo { val pendingAuthenticateCallbacks = mutableListOf Unit>() inline fun authenticate( login: String, password: String, database: String, quick: Boolean = false, crossinline callback: Authenticate.() -> Unit ) { // Following statement has error saying // Illegal usage of inline […]

调试Kotlin内联函数

我在我的基于Kotlin的Android项目中使用了内联函数(我被迫使用,因为我使用了关键字)。 有没有可能调试类似于普通的内联函数? 断点不会抢夺,我猜,这与插入函数的代码插入过程有关