scala 有没有一种简单的方法可以将布尔值转换为整数?

of1yzvn4  于 2023-01-20  发布在  Scala
关注(0)|答案(6)|浏览(248)

我是Scala新手,我发现需要将布尔值转换为整数。我知道我可以使用类似if (x) 1 else 0的东西,但我想知道是否有首选方法,或内置在语言中的东西(即toInt())。

tjrkku2a

tjrkku2a1#

如果你想混合BooleanInt操作,那么就像上面那样使用implicit,但是不要创建类:

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
pdtvr36n

pdtvr36n2#

使用隐式转换可以轻松地完成此操作:

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
h7appiyu

h7appiyu3#

虽然使用implicit可能是最好的方法,但如果您希望快速地将boolean转换为int,则可以使用boolean.compare(false)

bkkx9g8r

bkkx9g8r4#

实际上,我希望它是if (x) 1 else 0,而不是if (x) 0 else 1
这就是为什么你应该编写自己的转换,整数不是布尔型的,如果你出于某种原因想把布尔型存储为整数,那么你应该磨练自己的标准,如何表示真和假。
布尔值“true”不是一个数字,它是布尔类型的一个示例。就像java.lang.Boolean.TRUE一样。它可以作为一个整数存储在内部,但这是一个实现细节,不应该泄漏到语言中。
我认为if (x) 0 else 1是首选的转换方法,它简单快捷。
如果希望使用更通用的模式匹配方法,也可以编写x match {case true => 0; case false => 1}

wswtfjt7

wswtfjt75#

自Scala 2.10以来,JacksonDavis的解决方案更常使用an implicitvalue类编写:

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

为了增加舒适度,我还添加了一个乘法运算符,因为这是布尔到整数转换最常见的用法。我宁愿这样做,而不是隐式转换(帕特里克提供的解决方案),因为这样会失去更多的类型控制。

az31mfrm

az31mfrm6#

如果您不想使用隐式方法,以下命令可能会很有用:

var myBool:Boolean = true
myBool: Boolean = true

myBool.compare(false)
res3: Int = 1

myBool = false
myBool: Boolean = false

myBool.compare(false)
res3: Int = 0

相关问题