awk问题(从用户定义的函数返回一个数组)

sta*_*tic 11 arrays error-handling awk return reference

我有这个功能(将WGS84大地水准面的坐标转换为笛卡尔坐标......无所谓):

  function convert_geo_to_enu(coord_geo) { \
    xi=sqrt(1 - e*e*sin(coord_geo[1])*sin(coord_geo[2])); \
        \
        coord_enu[1]=(a/xi + coord_geo[3])*cos(coord_geo[1])*cos(coord_geo[2]); \
        print coord_enu[1] " hhh " ; \
        coord_enu[2]=(a/xi + coord_geo[3])*cos(coord_geo[1])*sin(coord_geo[2]); \
        coord_enu[3]=(a*(1-e*e)/xi0 + coord_geo[3])*sin(coord_geo[1]); \
    \
    return coord_enu \   # <-- here comes the problem
  } \


problem --> mawk: line 64: illegal reference to array coord_enu
Run Code Online (Sandbox Code Playgroud)

作为数组返回有什么问题?有没有不同的语法?

我可以用:

  function convert_geo_to_enu(coord_geo, coord_enu) { \
       ...
       coord_enu[1]=...
       ...
  } \
Run Code Online (Sandbox Code Playgroud)

甚至:

  function convert_geo_to_enu(coord_geo) { \
       ...
       coord_enu[1]=...
       ...
  } \
Run Code Online (Sandbox Code Playgroud)

然后只使用变量coord_enu作为全局变量?

但使用return语句看起来更好(特别是对我来说)

小智 16

有点晚了,但这是我用过的解决方案:

我发送了一个我想填充的变量作为函数的参数:

function myfunct(result, array_size) {
    for(i = 1; i <= array_size; i++) {
        result[i] = ##whatever you want
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以将结果变量视为函数外部的数组

希望这有助于寻找答案的人


Pau*_*ce. 12

将数组视为全局数组.AWK无法返回数组.

  • 参考:https://www.gnu.org/software/gawk/manual/html_node/Pass-By-Value_002fReference.html (2认同)