golang의 type switch 문에 fallthrough가 허용되지 않는 이유가 궁금합니다.왜 형식 전환에서 fallthrough가 허용되지 않습니까?
specification에 따르면 다음과 같습니다. "허용되지 않는 이유에 대해 많이 설명하지 않은"전환 통과 "문은 입력 스위치에서 허용되지 않습니다."
첨부 된 코드는 유용 할 수도있는 전환 유형의 전환이라고 할 수있는 가능한 시나리오를 시뮬레이트하는 것입니다.
주의!이 코드는 작동하지 않으며 오류를 생성합니다. "전환 할 수 없습니다." 유형 전환에서 fallthrough 문을 허용하지 않을 때 가능한 이유가 무엇인지 궁금합니다.
//A type switch question
package main
import "fmt"
//Why isn't fallthrough in type switch allowed?
func main() {
//Empty interface
var x interface{}
x = //A int, float64, bool or string value
switch i := x.(type) {
case int:
fmt.Println(i + 1)
case float64:
fmt.Println(i + 2.0)
case bool:
fallthrough
case string:
fmt.Printf("%v", i)
default:
fmt.Println("Unknown type. Sorry!")
}
}
@KevinBallard, 내 나쁜. – Ben
설명 주셔서 감사합니다. 그러나 fmt.Printf ("% T \ n", i)가 "bool"을 다시 인쇄하지 않는 이유를 정말로 이해할 수 없습니다. 규칙적인 fallthrough에서는 case 문이 무시되고 표현식이 무시됩니다. 아마도이 문제를 정규 스위치 문에 많이 관련 시켜서이 문제를 파악하기가 어려울 것입니다. – Karlek
@Mandarin :'i'가'string' 인 경우 컴파일되는 코드는'i'가'bool' 인 경우 컴파일되지 않을 수 있습니다. 하나의 변수를 두 개의 다른 유형으로 처리하는 코드를 작성할 수 없습니다. 그렇다면'case bool '에 어떤 유형이 있을까요? 'bool '이 될 수는 없습니다.'string'이라면 반드시'case bool'에서 가지고 있던 값을 폐기해야합니다. 코드 없이는 쓸모가 없습니다. –