根据用户从命令行输入,切换情况返回整数的评级。由于命令行参数是字符串类型,我首先将其转换为int
,然后在switch.
package main
import (
"fmt"
"os"
"reflect"
"strconv"
)
func main() {
rating, _ := strconv.Atoi(os.Args[1])
fmt.Println(reflect.TypeOf(rating))
switch rating {
case rating >= 2100:
fmt.Println("grand master")
case rating >= 1900:
fmt.Println("candidate master")
case rating >= 1600:
fmt.Println("expert")
case rating >= 1400:
fmt.Println("pupil")
case rating < 1400:
fmt.Println("newbie")
}
}
现在评级>= 2100有错误,而不是所有比较。内容如下:
cannot convert rating >= 2100 (untyped bool value) to intcompilerInvalidUntypedConversion
无法理解如何解决此问题。
请帮忙!
如果您使用switch
表达式,则必须在它们具有可比性的地方使用case
表达式。Spec: Switch语句:
对于每一个(可能转换的)大小写表达式
x
和开关表达式的值t
,x == t
必须是一个有效的比较。
也就是说,如果你使用switch rating { ... }
,那么你只需要指定整数值,例如2100
,而不需要像rating >= 2100
这样的比较。
显然你不想要单个值,而是要范围,所以省略switch表达式:
switch {
case rating >= 2100:
fmt.Println("grand master")
case rating >= 1900:
fmt.Println("candidate master")
case rating >= 1600:
fmt.Println("expert")
case rating >= 1400:
fmt.Println("pupil")
case rating < 1400:
fmt.Println("newbie")
}
你基本上是在重复上面已经存在的变量名在这里输入图像描述