科特林 Class 扩展
Kotlin Class Extension
我只是将 Kotlin 作为 Project Euler 的一个有趣的副项目来学习。我 5 分钟前刚刚开始使用 IntelliJ IDEA。
我有这个代码:
fun Number.isMultipleOf(n: Number): Boolean {
return this % n == 0
}
fun main(args: Array<String>){
println(10.isMultipleOf(5))
}
编译错误是这样的:
Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@Deprecated @InlineOnly public inline operator fun BigDecimal.mod(other: BigDecimal): BigDecimal defined in kotlin
我在 Java、Python、C++ 和 Swift 方面经验丰富,所以我认为 Kotlin 应该不是那么大的挑战。但是 WTF 是 "receiver type"?
如何在从 Number
class 扩展中获得所需功能的同时修复此编译错误?
哦!
想一想,由于浮点精度问题,isMultipleOf
在浮点数和双精度数上不会那么有效。
所以这是修改后的代码:
fun Int.isMultipleOf(n: Int): Boolean {
return this % n == 0
}
然后编译。
只是想解释术语接收器类型和提到的错误。
行中出现错误
return this % n == 0
仔细一看,this
是变量类型Number。所以 Number 是你在上面语句中的接收器类型(因为它接收第二个操作数来操作)。 Number 是 Kotlin 中所有 Numeric 对象(如 Int、Float ...)的抽象超级 class,它没有内联函数来执行 modulo(%) 操作。因此你得到了错误。希望这有帮助。
我只是将 Kotlin 作为 Project Euler 的一个有趣的副项目来学习。我 5 分钟前刚刚开始使用 IntelliJ IDEA。
我有这个代码:
fun Number.isMultipleOf(n: Number): Boolean {
return this % n == 0
}
fun main(args: Array<String>){
println(10.isMultipleOf(5))
}
编译错误是这样的:
Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@Deprecated @InlineOnly public inline operator fun BigDecimal.mod(other: BigDecimal): BigDecimal defined in kotlin
我在 Java、Python、C++ 和 Swift 方面经验丰富,所以我认为 Kotlin 应该不是那么大的挑战。但是 WTF 是 "receiver type"?
如何在从 Number
class 扩展中获得所需功能的同时修复此编译错误?
哦!
想一想,由于浮点精度问题,isMultipleOf
在浮点数和双精度数上不会那么有效。
所以这是修改后的代码:
fun Int.isMultipleOf(n: Int): Boolean {
return this % n == 0
}
然后编译。
只是想解释术语接收器类型和提到的错误。
行中出现错误
return this % n == 0
仔细一看,this
是变量类型Number。所以 Number 是你在上面语句中的接收器类型(因为它接收第二个操作数来操作)。 Number 是 Kotlin 中所有 Numeric 对象(如 Int、Float ...)的抽象超级 class,它没有内联函数来执行 modulo(%) 操作。因此你得到了错误。希望这有帮助。