Scala 有没有一种方法可以使用布尔匹配

Scala 有没有一种方法可以使用布尔匹配,scala,if-statement,functional-programming,pattern-matching,Scala,If Statement,Functional Programming,Pattern Matching,我发现使用match比if更具可读性。如果我有一个布尔值可以与匹配一起使用吗 我通常这样做 if(!authorised) {...} else {..} 但是我做不到 authorised match { case ??? //what here?? } 您只需要使用布尔文字: 授权匹配{ 大小写正确=>/*大小写正确*/ 案例错误=>/*案例错误*/ } 您只需要使用布尔文本: 授权匹配{ 大小写正确=>/*大小写正确*/ 案例错误=>/*案例错误*/ } 您可以简单地编写: a

我发现使用
match
if
更具可读性。如果我有一个
布尔值
可以与
匹配
一起使用吗

我通常这样做

if(!authorised) {...} else {..}
但是我做不到

authorised match {
    case ??? //what here??
}

您只需要使用布尔文字:

授权匹配{
大小写正确=>/*大小写正确*/
案例错误=>/*案例错误*/
}

您只需要使用布尔文本:

授权匹配{
大小写正确=>/*大小写正确*/
案例错误=>/*案例错误*/
}
您可以简单地编写:

authorised match {
  case true => ...
  case false => ...
}
尽管intellij建议重构到
if
语句。

您只需编写:

authorised match {
  case true => ...
  case false => ...
}
尽管intellij建议重构到
if
语句。

您可以这样做:

authorised match {
  case true => // true case 
  case false => // false case
  case _ => // other case for exception or null
}
您可以这样做:

authorised match {
  case true => // true case 
  case false => // false case
  case _ => // other case for exception or null
}

模式匹配,考虑为布尔代数提供扩展方法,例如,考虑


模式匹配,考虑为布尔代数提供扩展方法,例如,考虑

您可以使用

authorised match {
    case true => ...
    case false => ...
}
请注意,在Scala中,布尔值的模式匹配不是很惯用,您最好使用标准的
if/else
表达式。编译器实际上无法为模式匹配生成相同的高效代码,如中所述。Scala初学者对模式匹配过于热情并开始在任何地方使用它是很常见的,但是对于纯布尔型,坚持使用
if/else
确实有意义


旁注:其他答案提到使用默认子句,如

授权匹配{
大小写正确=>/*大小写正确*/
案例错误=>/*案例错误*/
案例=>/*默认案例*/
}
这是不必要的,因为
Boolean
只能是
true
false
。与所有基元类型一样,它们不能被赋值为
null
,因此附加子句是无用的,编译器会合理地警告您

warning: unreachable code
       case _ => /* default case */
您可以使用

authorised match {
    case true => ...
    case false => ...
}
请注意,在Scala中,布尔值的模式匹配不是很惯用,您最好使用标准的
if/else
表达式。编译器实际上无法为模式匹配生成相同的高效代码,如中所述。Scala初学者对模式匹配过于热情并开始在任何地方使用它是很常见的,但是对于纯布尔型,坚持使用
if/else
确实有意义


旁注:其他答案提到使用默认子句,如

授权匹配{
大小写正确=>/*大小写正确*/
案例错误=>/*案例错误*/
案例=>/*默认案例*/
}
这是不必要的,因为
Boolean
只能是
true
false
。与所有基元类型一样,它们不能被赋值为
null
,因此附加子句是无用的,编译器会合理地警告您

warning: unreachable code
       case _ => /* default case */

可能重复的可能重复除了
true
false
之外还有其他情况吗?@pme可能是
null
ah-我有时忘记了在Scala中仍然可能有null;)是的,下面仍然有java,而且拥有默认值总是一个很好的实践case@Andronicus据我所知,Scala不允许您将
null
赋值给基元类型,因此这个附加子句很容易混淆,而且不可访问。编译器将警告您这一点,如我对@Krzysztof答案的编辑所示。除了
true
false
,还有其他情况吗?@pme可能是
null
啊-我有时忘记了在Scala中仍然可能有null;)是的,下面仍然有java,而且拥有默认值总是一个很好的实践case@Andronicus据我所知,Scala不允许您将
null
赋值给基元类型,因此这个附加子句很容易混淆,而且不可访问。编译器会警告您,如我对@Krzysztof答案的编辑所示。附加子句是不必要的
null
不能分配给
布尔值
,这将无助于管理任何异常。编译器将在此子句中警告您无法访问的代码。不需要附加子句
null
不能分配给
布尔值
,这将无助于管理任何异常。编译器将在此子句中警告您无法访问的代码。这不是一个非常标准的模式,除非您已经将库用于某些其他功能,否则这肯定是过杀。这不是一个非常标准的模式,除非您已经将库用于某些其他功能,否则这肯定是过杀。