Существует ли простой способ преобразовать булевскую переменную в целое число?

Я плохо знаком с scala, и я нахожу потребность преобразовать булево значение в целое число. Я знаю, что могу использовать что-то как if (x) 1 else 0 но я хотел бы знать, существует ли предпочтительный метод или что-то встроенное в платформу (т.е. toInt())

40
задан Russ Bradberry 14 April 2010 в 16:53
поделиться

3 ответа

Если вы хотите смешивать логическое и Int операцию, используйте неявное , как указано выше но без создания класса:

implicit def bool2int(b:Boolean) = if (b) 1 else 0

scala> false:Int
res4: Int = 0

scala> true:Int
res5: Int = 1

scala> val b=true
b: Boolean = true


scala> 2*b+1
res2: Int = 3
52
ответ дан 27 November 2019 в 01:23
поделиться

Вы можете легко сделать это с помощью неявных преобразований:

class asInt(b: Boolean) {
  def toInt = if(b) 1 else 0
}

implicit def convertBooleanToInt(b: Boolean) = new asInt(b)

Тогда вы получите что-то вроде

scala> false toInt
res1: Int = 0
16
ответ дан 27 November 2019 в 01:23
поделиться

На самом деле, я бы ожидал, что это будет if (x) 1 else 0 , а не if (x) 0 еще 1 .

Вот почему вы должны писать свои собственные преобразования. Целое число не является логическим, и если вы по какой-то причине хотите хранить логические значения как целые числа, вам следует отточить свои собственные стандарты представления истины, а не истины.

Логическое «истина» не является числом, это экземпляр логического типа. Например, java.lang.Boolean.TRUE . Он может храниться внутри как целое число, но это деталь реализации, которая не должна попадать в язык.

Я бы сказал, что if (x) 0 else 1 является предпочтительным методом преобразования. Это просто и быстро.

Вы также можете написать x match {case true => 0; case false => 1} , если вы хотите использовать более общий подход к сопоставлению с образцом.

6
ответ дан 27 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: