如何在IDL中使用带有表示变量名称的字符串结构的scope_varname?

时间:2017-05-02 20:38:00

标签: string variables scope idl-programming-language

我有一个IDL函数,最多可接收4个数据变量:data1data2data3data4。我希望能够使用数据变量名称的字符串构造在循环中访问这些变量的level = -1范围,因此我可以记录以有效方式传递给函数的原始数据的名称。

这是该功能的简化版本,仅显示相关部分。

Function funcData, dat1, dat2, dat3, dat4,
  n=1 
  txt = "Data " 
  ;Check that data variable n was passed.                                      
  WHILE N_ELEMENTS(scope_varfetch("dat"+strtrim(n+1,1), level=0, /enter)) $
      NE 0 DO BEGIN
    dat = scope_varfetch("dat"+strtrim(n,1), level=0, /enter)    ; get data
    txt=txt + scope_varname("dat"+ strtrim(n,1), level=-1) +", " ; data names  
    n+=1                                                         ; update n 
  ENDWHILE
END

问题是scope_varfetch处理连接的字符串构造" dat" + strtrim(n,1)并返回相应的数据集,但scope_varname不返回空白。

有谁知道为什么会这样? 有没有其他方法可以做到这一点(缺乏蛮力,案例格式)?

我曾尝试在线搜索答案,但未能找到有关在IDL范围函数中使用字符串结构的任何内容。

2 个答案:

答案 0 :(得分:1)

Facebook联系人提供了这个解决方案:

result=execute('sv=scope_varname(dat'+ strtrim(n,1)+', level=-1)')   
txt=txt + sv + ", "  

完美无缺。

答案 1 :(得分:1)

scope_varname期望变量作为参数,因此在使用时需要额外调用scope_varfetch

txt=txt + scope_varname((scope_varfetch("dat"+ strtrim(n,1))), level=-1) +", " ; data names