【问题标题】:Go language: Type XXX is not an expressionGo 语言:类型 XXX 不是表达式
【发布时间】:2016-03-30 16:24:28
【问题描述】:

我写了一个函数:

func Pic(dx, dy int) [][]uint8 {
    type matrix [][]uint8 

    for i := 0; i < dx; i++ { // fills up the matrix with z's in their right places.
        for j := 0; j < dy; j++ {
            matrix[i][j] = Z(i,j)
        }
    }

    return matrix
}

应该为每个 x 和 y 值填充一个带有 z 值的矩阵并返回它。由于我希望根据 Pic 函数的参数为​​矩阵设置不同的维度,因此我在第 2 行创建了一个切片。然后在我的 for 循环中填充矩阵。

运行此代码时出现错误:type matrix is not an expression 对应 matrix[i][j] = Z(i,j) 行。我究竟做错了什么? matrix[i][j] 应该计算为表达式吗?为什么要它,当我想放一些东西时(它现在是空的/不存在的!)?

【问题讨论】:

    标签: go slice


    【解决方案1】:

    您将matrix 声明为一种类型,但将其用作变量。

    尝试:

    var matrix [][]uint8
    

    【讨论】:

      【解决方案2】:

      虽然您可以使用var matrix [][]uint8,但我建议您使用内置的make 函数,因为您知道所需的长度——dx 用于外部切片,dy 用于内部切片。 Effective GoTwo-dimensional slices 部分给出了使用 make 分配二维切片的示例。以下是您的 Pic 函数的示例。

      func Pic(dx, dy int) [][]uint8 {
          matrix := make([][]uint8, dx)
      
          for i := 0; i < dx; i++ {
              matrix[i] = make([]uint8, dy)
              for j := 0; j < dy; j++ {
                  matrix[i][j] = Z(i, j)
              }
          }
          return matrix
      }
      

      【讨论】:

      • 非常有帮助!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2018-03-10
      • 1970-01-01
      相关资源
      最近更新 更多