gpt4 book ai didi

kotlin - 如何在 Kotlin 中使用运算符重载将数字除以数字向量

转载 作者:行者123 更新时间:2023-12-02 13:12:23 29 4
gpt4 key购买 nike

我正在尝试在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com