我正在尝试在 Kotlin 中重新创建我认为在 Pandas/Python 中可能的东西。我想执行除法,以便将数字(Int、Double 等)除以数字向量。 (有人告诉我这是可能的,但还没有找到引用资料。)我见过的一个例子是增长率计算的一部分
1.0 / data1['nYears']
这里 1.0 除以 data1['nYears'] 中的每个值,然后返回一列,其中包含按元素计算的结果。例如,如果列包含 2 和 4,则结果将是包含 0.5 和 0.25 的新列。
这可以在 Kotlin 中完成吗?
(FWIW,反向计算(将一列除以标量常数)可能更重要,但我想我会从这里开始。)
我使用带有扩展函数的运算符重载找到了一个部分解决方案:
operator fun Int.div(vector: Vector<Int>) : Vector<Double> {
val result = Vector("", ArrayList<Double?>())
for (e in vector) {
if (e == null) {
result.add(null)
} else {
result.add(this / (e * 1.0))
}
}
return result
}
这适用于 Ints,但是当我尝试将其扩展到其他数字类型时,我遇到了麻烦。例如,为 double 添加类似的方法我得到一个错误,我相信是由类型删除引起的。
Platform declaration clash: The following declarations have the same JVM signature...
接下来,我尝试提供一个带有 (Vector) 参数的方法来涵盖这两种情况,但是得到了
None of the following functions can be called with the arguments supplied
有没有办法在 Kotlin 中做到这一点?
最佳答案
问题是函数/运算符的名称相同,并且会生成相同的静态 Java 函数名称。您可以使用 @JvmName
轻松分配新的 Java 名称。注释(见 https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#handling-signature-clashes-with-jvmname)。
这是标准库中的一个示例:
@JvmName("sumOfInt")
fun Iterable<Int>.sum(): Int { ... }
@JvmName("sumOfFloat")
fun Iterable<Float>.sum(): Float { ... }
关于kotlin - 如何在 Kotlin 中使用运算符重载将数字除以数字向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57487564/