【问题标题】:Evaluated but not used评估但未使用
【发布时间】:2017-12-02 13:18:39
【问题描述】:

我不确定这里发生了什么。

我正在研究 Project Euler #8,并提出了以下函数来处理获取 5 位数的乘积:

func fiveDigitProduct(n int) int {
    localMax := n + 5
    product := 1
    for n; n < localMax; n++ {
        f, _ := strconv.Atoi(input[n])
        product *= f
    }
    return product
}

但是,我不断收到警告“n 已评估但未使用”。我不知道为什么会这样。

【问题讨论】:

  • 你没有在 for 循环的第一部分使用n,你必须像for ; n &lt; localMax; n++{......一样删除它
  • 成功了!事实上,我还必须将 for 循环中的第一行更改为 f , _ := strconv.Atoi(input[n:n+1)) 这有效

标签: go


【解决方案1】:

For StatementInitStmt(初始化语句)实际上并没有进行任何初始化。您要求编译器评估 n 但不对其执行任何操作,这就是编译器所抱怨的。由于您不需要为循环初始化 n,只需执行以下操作:

for ; n < localMax; n++ {

【讨论】:

    【解决方案2】:

    for 循环的初始化部分以及 post 部分(在其中增加 n)必须是 simple statement(并且“n”不是语句,它将是一个表达式,所以你是什么尝试做在语法上不正确)。如果您将 init 部分设为 n = n 或 n := n (for 循环范围内的新变量声明),它将是一个有效的语句并且可以工作。正如上述帖子中所建议的那样,由于您不打算在 init 部分执行任何操作,因此最好将其省略。

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多