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

Function 如何在我定义的函数中接受数组,function,idl-programming-language,Function,Idl Programming Language,当我尝试向以下函数提供数组时,它给出以下错误:%Expression在此上下文中必须是标量或1元素数组:。如何修改,使我可以给它一个标量或数组 这应该做到: function whatisit, x return, x gt 0 - x lt 0 end 编辑:出于教学方面的原因,我将展示丑陋的(未经测试的)循环解决方案,但您永远不应该在IDL中这样做: function whatisit, x n = n_elements(x) result = bytarr(n) for

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


这应该做到:

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
这应该做到:

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

谢谢你的回复,镁合金。您的解决方案是可行的,但我最初的目标是学习如何使用上面提供的控制语句在数组(或标量)中循环——您知道我可以如何实现这一点吗?在IDL中,您不希望在不需要循环的情况下循环数组的元素;有一个明确的性能惩罚。我将提交另一个非矢量化解决方案。感谢您的回复,Mgalloy。您的解决方案是可行的,但我最初的目标是学习如何使用上面提供的控制语句在数组(或标量)中循环——您知道我可以如何实现这一点吗?在IDL中,您不希望在不需要循环的情况下循环数组的元素;有一个明确的性能惩罚。我将提交另一个非矢量化解决方案。