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

时间:2010-04-13 22:47:47

标签: scala casting integer boolean

我是scala的新手,我发现需要将布尔值转换为整数。我知道我可以使用像if (x) 1 else 0这样的东西,但我想知道是否有一个首选的方法,或者框架内置的东西(即toInt()

6 个答案:

答案 0 :(得分:50)

如果您想混合使用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

答案 1 :(得分:15)

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

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

答案 2 :(得分:11)

使用implicit可能是最好的方法,如果您想要从booleanint进行快速转换,可以使用boolean.compare(false) < / p>

答案 3 :(得分:6)

实际上,我希望它是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}

答案 4 :(得分:4)

如果您不想采用隐式方式,这可能很有用:

var myBool:Boolean = true
myBool: Boolean = true

myBool.compare(false)
res3: Int = 1

myBool = false
myBool: Boolean = false

myBool.compare(false)
res3: Int = 0

答案 5 :(得分:3)

自Scala 2.10以来,Jackson Davis的解决方案通常使用an implicit value类编写:

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

为了增加舒适度,我还添加了一个乘法运算符,因为这是我对布尔到Int转换的最常见用法。我更倾向于使转换本身隐含(由Patrick提供的解决方案),因为它失去了比我想要的更多的类型控制。