可以通过定义单独文件的方式来定义IDL类, 比较容易管理, 定义的方式是:
pro <芹仿ClassName>__define
struct = {<className>, ...}
end
文件名是:<ClassName>__define.pro
在这个文件中, 还可以添加类成员函数的定义, 如:
pro <className>::hello
...
end
IDL不区分大小写, 所以类名/函绝袭数名/关键字等均可以不受大小写的限制
IDL对类提供一些专门的成员函数, 完成专用的任务. 比如: INIT为构造函数, CLEANUP为析构函数(在对象被释放时调用, 比如OBJ_DESTROY函数). 但是这些函数不能在外部被调用, 但是可以在函数内部看到, 主要是为了手工调用, 以实现父类的初始化函数被调用(IDL不会自动调用父类的INIT函数)
INIT函数可以带参数, 可以在调用OBJ_NEW生成对象时传入.
OBJ_NEW函数的调用形式如下:
Result = OBJ_NEW( [ObjectClassName [, Arg1......Argn]] )
IDL的函数和过程参数可以不完整, 比如函数A定义了5个参数, 可以用0-5个参数来调用. 对调用的参数情况可以用N_PARAMS和N_ELEMENTS来判断, 前者可以得到实际的调用参数的个数, 后者可以判断某个参数是否有值
sub Test::INIT, caption
print, N_PARAMS() 返回参与调用的参数个数
print, N_ELEMENTS(caption) 返回1为有值, 返回2为未定义
...
end
可以定义多个同名函数, 但只有最晚定义的那个有效, 前面的会被隐藏
从开码笑始做这个课题到现在就没少用IDL读FITS文件。这个方面用mrdfits比较容易,基本就是一行搞定数据,几行搞定文件头,用了不知多少次。其实在读FITS的时候就在想,把写FITS也搞明白吧,不过惰性太大,一直都回避这个问题。 今天合作者建议我罩慎把数据平滑一下重新计算。我用的那个程序的输入就是一个FITS文件,这就意味着我需要重新写一个平滑后的FITS文件,于是今天不得不去看看怎么写FITS文件了。原来知道和mrdfits对应的有mwrfits,专门写FITS文件的。我有一个数组迟闷含a和文件头head,于是按照说明里写 IDL>mwrfits,a,'out.fits',head 这样倒是可以生成一个FITS文件,查看了也正常,可是我用来处理的那个程序就是不认。不得已,参考了一下别人的程序,用writefits IDL>writefits, 'out.fits', a, head 这样生成的FITS文件就能被识别了。原因为何,有待研究。 在文件头某些信息改变的情况下还需要改一下文件头里的参数,可以用fxaddpar,例如改变参数'NAXIS'的值 IDL>fxaddpar,'NAXIS',2欢迎分享,转载请注明来源:内存溢出
评论列表(0条)