如何在我定义的函数中接受数组

时间:2016-02-19 23:50:08

标签: function idl-programming-language

当我尝试将以下函数提供给数组时,它会给出以下错误:%Expression在此上下文中必须是标量或1个元素数组:。如何修改,以便我可以给它一个标量或数组?

; return integer -1, 0, or 1, depending on whether x is less than 0, equal to 0, or greater than 0, respectively
function whatisit, x
  case 1 of
    (x lt 0): y=-1
    (x eq 0): y=0
    (x gt 0): y=1
  endcase
  return, y
end

1 个答案:

答案 0 :(得分:2)

这应该这样做:

function whatisit, x
  return, x gt 0 - x lt 0
end

编辑:出于教学原因,我将展示丑陋(未经测试)的循环解决方案,但你绝不应该在IDL中这样做:

function whatisit, x
  n = n_elements(x)
  result = bytarr(n)
  for i = 0L, n - 1L do begin
    case 1 of
      x[i] lt 0: result[i] = -1
      x[i] eq 0: result[i] = 0
      x[i] gt 0: result[i] = 1
    endcase
  endfor
  return, size(x, /n_dimensions) eq 0 ? result[0] : result
end