php小編魚仔為您介紹switch case語句中變量的范圍問題。在switch case語句中,變量的作用域僅限于當前的case塊內部,不會影響到其他case塊。這意味著,即使在不同的case塊中使用相同的變量名,它們也是互相獨立的,不會造成沖突。這種特性使得我們可以在不同的case塊中使用相同的變量名,而不必擔心產生錯誤或沖突。因此,在編寫switch case語句時,我們可以更加靈活地操作變量,提高代碼的可讀性和可維護性。
問題內容
package main import "fmt" func main() { x := 10 switch x { case 0: y := 'a' fmt.Printf("%c\n", y) case 1: // y = 'b' // this can't compile, y := 'b' fmt.Printf("%c\n", y) default: y := '-' fmt.Printf("%c\n", y) } }
登錄后復制
似乎每個 case
中的 y
都是包含 case
的本地文件,對其他案例不可見。
據我所知:
{}
可以創建本地范圍,但每個 case
沒有 {}
。
Java 不同。
網上查了一下,沒有得到明確的定義。我知道我們可以在 switch
的 initialization
部分聲明 switch 范圍變量。
問題:
-
您能否確認,在 Golang 中,開關
case
內的變量范圍是 case 本身的本地變量?這是不是一個特殊的設計,上面提到了每個
case
都沒有{}
。
解決方法
規范:塊:
正如您在規范中看到的:每個子句(例如 case
)充當隱式塊,無需顯式使用 {}
。