Rah*_*rma 1 go switch-statement
根据命令行中的用户输入,switch case 返回整数的评级。由于命令行参数是字符串类型,我首先将其转换为字符串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")
}
}
Run Code Online (Sandbox Code Playgroud)
现在,对于所有比较而言,评级 >= 2100 时都会出现错误。其过程如下:
cannot convert rating >= 2100 (untyped bool value) to intcompilerInvalidUntypedConversion
Run Code Online (Sandbox Code Playgroud)
无法理解如何解决这个问题。
请帮忙!
如果使用switch表达式,则必须使用case具有可比较性的表达式。规格: Switch 语句:
对于每个(可能已转换的)case 表达式和switch 表达式的
x值,必须是有效的比较。tx == 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")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3273 次 |
| 最近记录: |