visual tipos que ejemplo dim booleanas bool scala casting integer boolean

scala - tipos - ¿Hay una manera fácil de convertir un valor booleano a un número entero?



tipos de variables en visual basic (6)

Desde Scala 2.10, la solución de Jackson Davis se escribe con mayor frecuencia utilizando una clase de value implícito :

implicit class BoolToInt(val b:Boolean) extends AnyVal { def toInt = if (b) 1 else 0 def * (x:Int) = if (b) x else 0 }

Para mayor comodidad, también agregué un operador de multiplicación, ya que este es el uso más común de una conversión Boolean to Int para mí. Prefiero esto más que hacer que la conversión sea implícita (solución provista por Patrick), ya que eso pierde más control de tipo de lo que yo quiero.

Soy nuevo en scala y encuentro la necesidad de convertir un valor booleano en un entero. Sé que puedo usar algo como if (x) 1 else 0 pero me gustaría saber si hay un método preferido, o algo incorporado en el marco (es decir, toInt() )


En realidad, esperaría que fuera if (x) 1 else 0 , no if (x) 0 else 1 .

Es por eso que debes escribir tus propias conversiones. Integer no es un booleano, y si desea por alguna razón almacenar booleanos como enteros, entonces debe perfeccionar sus propios estándares de cómo se representa la verdad y no la verdad.

Booleano "verdadero" no es un número, es una instancia del tipo booleano. Como java.lang.Boolean.TRUE . Se puede almacenar internamente como un entero, pero es un detalle de implementación que no debe filtrarse en el lenguaje.

Diría que if (x) 0 else 1 es el método preferido de conversión. Es simple y rápido.

También puede escribir x match {case true => 0; case false => 1} x match {case true => 0; case false => 1} si desea utilizar un enfoque de coincidencia de patrón más general.


Puede hacerlo fácilmente con conversiones implícitas:

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

Entonces, obtendrás algo como

scala> false toInt res1: Int = 0


Si bien usar un implicit es probablemente la mejor manera de hacerlo, si quieres una conversión rápida y sucia de boolean a int puedes usar boolean.compare(false)


Si desea mezclar operaciones Boolean e Int , use una implicit como la anterior pero sin crear una clase:

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


Si no quieres ir de la manera implícita, esto puede ser útil:

var myBool:Boolean = true myBool: Boolean = true myBool.compare(false) res3: Int = 1 myBool = false myBool: Boolean = false myBool.compare(false) res3: Int = 0