Вычтите 2 обнуляемого типа поплавка в котлин - PullRequest
0 голосов
/ 10 июня 2019

У меня есть два свойства с плавающей запятой, и я хочу вычесть их:

val dis1: Float? = 10.0f
val dis2: Float? = 5.0f

val value = dis1 - dis2

Я создал эту функцию расширения. Но это происходит в бесконечном цикле:

operator fun Float?.minus(dis2: Float?): Float {
  return this - dis2
}

Ответы [ 3 ]

3 голосов
/ 10 июня 2019

Простой, вы можете использовать

operator fun Float?.minus(dis2: Float?): Float {
    return (this ?: 0f) - (dis2 ?: 0f)
}

?: проверяет, присутствует ли значение, если нет, тогда он присваивает значение по умолчанию

Но оно идет бесконечноloop

Ваше расширение находится в бесконечном цикле, потому что в возвращаемом типе вы снова вызываете - (минус) в двух обнуляемых числах с плавающей запятой.

2 голосов
/ 10 июня 2019

Вы можете просто вернуть 0, если значение равно null, чтобы избежать KotlinNullPointerException. В вашем методе:

fun minus(value1: Float?, value2: Float): Float{
   val firstValueHelper = value1 :? 0f
   val secondValueHelper = value2 :? 0f

   return firstValueHelper - secondValueHelper
}
2 голосов
/ 10 июня 2019

вы ничего не делаете, кроме вызова оператора минус, таким образом, вы получаете бесконечный цикл

делаете нулевую проверку и вызываете оператор минуса по умолчанию Float

  val dis1: Float? = 10.0f
  val dis2: Float? = 5.0f

  operator fun Float?.minus(dis2: Float?): Float {
        return (this ?: 0f) - (dis2 ?: 0f)

  val value = dis1 - dis2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...