我只是在学习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是一种“接收器类型”?
如何从Number
类扩展中获取所需的功能时修复此编译错误?
只是试图解释术语接收器类型和提到的错误。
行中出错
return this % n == 0
如果你仔细观察,this
是变量类型的数字。所以Number是上面语句中的接收器类型(因为它接收第二个操作数来操作)。 Number是Kotlin中所有Numeric对象(如Int,Float ...)的抽象超类,它没有内联函数来执行模数(%)操作。因此,您收到错误。希望这可以帮助。
哦!
思考一分钟,由于浮点精度问题,isMultipleOf
在浮点数和双精度数上不会那么有效。
所以这是修改后的代码:
fun Int.isMultipleOf(n: Int): Boolean {
return this % n == 0
}
那就编译了。