如何在 IDL 中将 scope_varname 与表示变量名称的字符串结构一起使用?
How can I use scope_varname in IDL with a string construct representing the variable name?
我有一个 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) 和 returns 适当的数据集,但 scope_varname 没有, 返回空白。
有谁知道为什么会这样?
有没有其他方法可以做到这一点(缺少蛮力,案例格式)?
我试图在线搜索答案,但未能找到有关在 IDL 作用域函数中使用字符串结构的任何信息。
一位 Facebook 联系人提供了这个解决方案:
result=execute('sv=scope_varname(dat'+ strtrim(n,1)+', level=-1)')
txt=txt + sv + ", "
完美运行。
scope_varname
需要一个变量作为它的参数,所以你需要在使用它的时候额外调用scope_varfetch
:
txt=txt + scope_varname((scope_varfetch("dat"+ strtrim(n,1))), level=-1) +", " ; data names
我有一个 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) 和 returns 适当的数据集,但 scope_varname 没有, 返回空白。
有谁知道为什么会这样? 有没有其他方法可以做到这一点(缺少蛮力,案例格式)?
我试图在线搜索答案,但未能找到有关在 IDL 作用域函数中使用字符串结构的任何信息。
一位 Facebook 联系人提供了这个解决方案:
result=execute('sv=scope_varname(dat'+ strtrim(n,1)+', level=-1)') txt=txt + sv + ", "
完美运行。
scope_varname
需要一个变量作为它的参数,所以你需要在使用它的时候额外调用scope_varfetch
:
txt=txt + scope_varname((scope_varfetch("dat"+ strtrim(n,1))), level=-1) +", " ; data names