我有一个IDL函数,最多可接收4个数据变量:data1
,data2
,data3
和data4
。我希望能够使用数据变量名称的字符串构造在循环中访问这些变量的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范围函数中使用字符串结构的任何内容。
答案 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