2014-07-26 40 views
0

我正在努力学习Go并创建了一个函数,我声明了一个变量game_ratio并将其设置为0.0。然后我有一个if语句,我尝试更新game_ratio的值。当我尝试编译,我得到以下错误信息: “game_ratio声明,不使用”如何在Go中的if语句中更新变量的值?

这里是我的功能:

func gameRatio(score1 int, score2 int, max_score float64) float64 { 
    var game_ratio float64 = 0.0 
    var scaled_score_1 = scaleScore(score1, max_score) 
    var scaled_score_2 = scaleScore(score2, max_score) 
    fmt.Printf("Scaled score for %v is %v\n", score1, scaled_score_1) 
    fmt.Printf("Scaled score for %v is %v\n", score2, scaled_score_2) 
    if score1 > score2 { 
     game_ratio := (scaled_score_1+1.0)/(scaled_score_1+scaled_score_2+2.0) + 1.0*0.5 
    } 
    return game_ratio 
} 

下面的代码来调用它:

func main() { 
    flag.Parse() 
    s1 := flag.Arg(0) 
    s2 := flag.Arg(1) 
    i1, err := strconv.Atoi(s1) 
    i2, err := strconv.Atoi(s2) 
    if err != nil { 
     fmt.Println(err) 
     os.Exit(2) 
    } 
    fmt.Println("Game ratio is", gameRatio(i1, i2, 6)) 
} 

ScaleScore是我写的另一个函数。如果我删除了if语句,代码就可以工作。

运行我的应用程序,我键入“排名28 24”

回答

4

短变量声明重新声明game_ratio

game_ratio := (scaled_score_1+1.0)/(scaled_score_1+scaled_score_2+2.0) + 1.0*0.5 

使用任务。写:

game_ratio = (scaled_score_1+1.0)/(scaled_score_1+scaled_score_2+2.0) + 1.0*0.5 

The Go Programming Language Specification

Short variable declarations

短变量声明使用语法:

ShortVarDecl = IdentifierList ":=" ExpressionList . 

它是与初始 表达式,但一个普通变量声明速记没有类型:

"var" IdentifierList = ExpressionList . 

不同于常规的变量声明,短变量声明可以 重新声明变量提供它们原来早在 与同类型同一个块中声明,以及非空 变量中的至少一个是新的。因此,重新声明只能出现在多变量短期声明 中。重新申报不会引入 新变量;它只是为原件分配一个新的值。

+0

Jeez。完全没有注意到。谢谢! – user338413