簡體   English   中英

Switch語句忽略多個案例的Where子句

[英]Switch statement ignores Where clause for multiple cases

請考慮以下情形:

enum XYZ {
  case X
  case Y
  case Z
}

let x = XYZ.X

switch x {
case .X, .Y where false:
  println("x or y")
case .Z:
  println("z")
default:
  println("default")
  break
}

即使where子句為false ,此代碼段也會打印x or y

沒有發現任何提及它。 任何人都知道如何重構這個而不重復第一種情況下的代碼?

我現在使用了fallthough ,但where子句現在重復了

where CONDITION僅與.Y綁定的守衛。

case .X where false, .Y where false:

那是因為它符合.X案例

基本上你的開關是這樣的:

switch x {
case .X:
    println("x or y") // This is true, and that's why it prints 
case  .Y where false:
    println("x or y") // This never gets executed
case .Z:
    println("z")
default:
    println("default")
    break
}

要讓它們處於相同的case ,您可能需要執行以下操作:

let x = XYZ.X

var condition = false
if x == .X || x == .Y {
    condition = true
}

switch x {
case _ where condition:
    println("x or y")
case .Z:
    println("z")
default:
    println("default")
    break
}

case標簽的語法是:

case-labelcase case-item-list :
case-item-listpattern guard-clause opt | pattern guard-clause opt , case-item-list

我們必須為每個“模式”編寫“guard-clause”。

如果您願意,您可以:

let condition:Bool = ...

switch x {
case let x where (x == .X || x == .Y) && condition:
    // ...

但我認為這不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM