如何调查 IDL 对象代码
原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/how-to-investigate-idl-object-code
12705 给本文评分:
4.0
如何调查 IDL 对象代码
匿名 2016年3月24日,星期四
IDL 附带的对象类通常都有非常完善的文档,这在你代码中使用 IDL 对象类时大有帮助。我经常从同事那里获得基于 IDL 对象的代码,而这些代码并不总是包含文档。当遇到这种情况时,我会使用这个示例代码来快速调查与对象类关联的方法和超类。
此代码示例会输出一个 HTML 表格,其中包含给定对象类的信息。
; 打印有关对象类的信息
pro ab_obj_info, obj, noresolve=noresolve, short=short, super=ksuper, $ out_super=super, quiet=quiet
compile_opt idl2
; 查找所有超类 if (size(obj, /type) eq 7) then class=obj else class=obj_class(obj) super=strupcase(class) if ~keyword_set(noresolve) then resolve_all, class=super[0], /quiet, /cont x=0 y=1 repeat begin for i=x,y-1 do begin sup=obj_class(super[i],/superclass) if (sup[0] ne '') then super=[super,sup] endfor x=y y=n_elements(super) endrep until (x eq y) if ~keyword_set(quiet) then print, 'Class: '+super[0] if (y gt 1) && ~keyword_set(quiet) then begin print, 'Superclass: '+super[1:*], format='(a)' endif if keyword_set(ksuper) then return ; print, '
| Class::Method | Arguments | Keyword | ' out = list() func = routine_info(/function) sysfunc = routine_info(/function, /system) proc = routine_info() sysproc = routine_info(/system) for i=0,y-1 do begin ind = where(func.StartsWith(super[i]+'::'),fcount) for j=0,fcount-1 do begin f = func[ind[j]] param = routine_info(f, /param, /func) print, '
| '+f+'() | ' if param.num_args gt 1 then begin str = strjoin(param.args[1:*],',') endif else str = '' print, ''+str+' | ' if param.num_kw_args gt 0 then begin str = strjoin(param.kw_args,',') endif else str = '' print, ''+str+' |
| '+f+' | ||
| '+p+'() | ' if param.num_args gt 1 then begin str = strjoin(param.args[1:*],',') endif else str = '' print, ''+str+' | ' if param.num_kw_args gt 0 then begin str = strjoin(param.kw_args,',') endif else str = '' print, ''+str+' |
| '+p+' |
这里我在 IDLgrColorbar 类上运行此代码,它本身已有完善文档,但作为一个方便的示例:
IDL> ab_obj_info,'idlgrcolorbar'
类: IDLGRCOLORBAR 超类: IDLGRMODEL 超类: IDLGRCONTAINER 超类: IDL_CONTAINER 超类: IDLGRCOMPONENT 超类: IDLITCOMPONENT
以下是输出的 HTML 表格,显示了与 IDLgrColorbar 类关联的所有方法。
| Class::Method | Arguments | Keyword |
|---|---|---|
| IDLGRCOLORBAR::COMPUTEDIMENSIONS() | OSRCDEST | PATH |
| IDLGRCOLORBAR::INIT() | ARED,AGREEN,ABLUE | BLUE_VALUES,COLOR,DIMENSIONS,GREEN_VALUES,HIDE,MAJOR,MINOR,NAME,PALETTE,RED_VALUES,SHOW_AXIS,SHOW_OUTLINE,SUBTICKLEN,THICK,THREED,TICKFORMAT,TICKFRMTDATA,TICKLEN,TICKTEXT,TICKVALUES,TITLE,UVALUE,XCOORD_CONV,YCOORD_CONV,ZCOORD_CONV,_EXTRA |
| IDLGRCOLORBAR::CALCSIZE() | DIMENSIONS,SHOW_AXIS,THICK | |
| IDLGRCOLORBAR::CLEANUP() | ||
| IDLGRCOLORBAR::GETPROPERTY() | ALL,BLUE_VALUES,COLOR,DIMENSIONS,GREEN_VALUES,HIDE,MAJOR,MINOR,NAME,PALETTE,PARENT,RED_VALUES,SHOW_AXIS,SHOW_OUTLINE,SUBTICKLEN,THICK,THREED,TICKFORMAT,TICKFRMTDATA,TICKLEN,TICKTEXT,TICKVALUES,TITLE,TRANSFORM,UVALUE,XCOORD_CONV,XRANGE,YCOORD_CONV,YRANGE,ZCOORD_CONV,ZRANGE,_REF_EXTRA | |
| IDLGRCOLORBAR::SETPROPERTY() | BLUE_VALUES,COLOR,DIMENSIONS,GREEN_VALUES,HIDE,MAJOR,MINOR,NAME,PALETTE,RED_VALUES,SHOW_AXIS,SHOW_OUTLINE,SUBTICKLEN,THICK,THREED,TICKFORMAT,TICKFRMTDATA,TICKLEN,TICKTEXT,TICKVALUES,TITLE,UVALUE,XCOORD_CONV,YCOORD_CONV,ZCOORD_CONV,_EXTRA | |
| IDLGRMODEL::GETCTM | ||
| IDLGRMODEL::GETXYZRANGE | ||
| IDLGRMODEL::INIT | ||
| IDLGRMODEL::ADD | ||
| IDLGRMODEL::CLEANUP | ||
| IDLGRMODEL::DRAW | ||
| IDLGRMODEL::DRAWSELF | ||
| IDLGRMODEL::GETPROPERTY | ||
| IDLGRMODEL::RESET | ||
| IDLGRMODEL::ROTATE | ||
| IDLGRMODEL::SCALE | ||
| IDLGRMODEL::SETPROPERTY | ||
| IDLGRMODEL::TRANSLATE | ||
| IDLGRCONTAINER::GETBYNAME | ||
| IDLGRCONTAINER::INIT | ||
| IDLGRCONTAINER::ADD | ||
| IDLGRCONTAINER::CLEANUP | ||
| IDLGRCONTAINER::DRAW | ||
| IDLGRCONTAINER::REMOVE | ||
| IDL_CONTAINER::COUNT | ||
| IDL_CONTAINER::EQUALS | ||
| IDL_CONTAINER::GET | ||
| IDL_CONTAINER::INIT | ||
| IDL_CONTAINER::ISCONTAINED | ||
| IDL_CONTAINER::ADD | ||
| IDL_CONTAINER::CLEANUP | ||
| IDL_CONTAINER::MOVE | ||
| IDL_CONTAINER::REMOVE | ||
| IDLGRCOMPONENT::INIT | ||
| IDLGRCOMPONENT::CLEANUP | ||
| IDLGRCOMPONENT::GETPROPERTY | ||
| IDLGRCOMPONENT::SETPROPERTY | ||
| IDLITCOMPONENT::EDITUSERDEFPROPERTY | ||
| IDLITCOMPONENT::GETFULLIDENTIFIER | ||
| IDLITCOMPONENT::GETPROPBYNAME | ||
| IDLITCOMPONENT::GETPROPERTYBYIDENTIFIER | ||
| IDLITCOMPONENT::INIT | ||
| IDLITCOMPONENT::QUERYPROPERTY | ||
| IDLITCOMPONENT::_GETALLPROPERTYDESCRIPTORS | ||
| IDLITCOMPONENT::CLEANUP | ||
| IDLITCOMPONENT::GETPROPERTY | ||
| IDLITCOMPONENT::GETPROPERTYATTRIBUTE | ||
| IDLITCOMPONENT::NOTIFYBRIDGE | ||
| IDLITCOMPONENT::REGISTERPROPERTY | ||
| IDLITCOMPONENT::RESTORE | ||
| IDLITCOMPONENT::SETPROPERTY | ||
| IDLITCOMPONENT::SETPROPERTYATTRIBUTE | ||
| IDLITCOMPONENT::SETPROPERTYBYIDENTIFIER | ||
| IDLITCOMPONENT::UNREGISTERPROPERTY | ||
| IDLITCOMPONENT::UPDATECOMPONENTVERSION |