登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
第一章 传递语法 IDL的函数经常是带参数的:
function,x,y
语句块
end
我长期没有发现的是,过程也是可以带参数的。
调用“过程”和“函数”时,参数传递的方式有2种:位置传递法,关键字传递法。
1.1位置传递 pro pro1,x1,x2,x3
语句块
end
调用时,pro1,1,2,3,就把1给了x1,2给了x2,3给了x3,之所以叫“位置传递”,就是因为参数是按顺序传递的,位置不可乱。
实例:
pro foreach_pro,x,y print,x,y print,n_params() End IDL> foreach_pro,'a',123 a 123 2 注:n_params()用来获得已设置参数的个数(不包括关键字传递的参数,只看位置传递的参数)。 1.2关键字传递 实例:
pro foreach_pro,a,x1=x1,x2=x2,s=s help,a,x1,x2,s print,keyword_set(x2) End IDL> foreach_pro,'aaa',x1=36,/s A STRING = 'aaa' X1 INT = 36 X2 UNDEFINED = <Undefined> S INT = 1 0 注:反斜杠相当于赋值1。keyword_set()用来检查某个参数是否已设置(返回0或1)。 使用关键字传递,可以不按顺序。 【关键字继承】 实例: pro foreach_pro,a,b,_extra=c fig=plot(a,b,_extra=c) End foreach_pro,[3,2,1,0],[4,5,6,7],color='r',sym=24 这里_extra=c将“color='r',sym=24”继承传递给了plot命令。 第二章 值传递与地址传递 C语言中,如果使用指针进行运算,则是直接使用了物理地址,其值在计算中可能改变,而数组名也相当于一个指针,对数组名计算可能改变数组。 IDL中的地址传递相当于使用指针。 实例: pro pro1,x x=x*3 end pro mainpro ;地址传递: a=5 pro1,a print,a ;值传递: defsysv,'!b',100 pro1,!b print,!b ;数组地址传递 c=findgen(4) pro1,c print,c ;数组值传递 pro1,c[0:-1] print,c End 输出: 15 100 0.000000 3.00000 6.00000 9.00000 0.000000 3.00000 6.00000 9.00000(注:经过地址传递,数组已经改变) 可见,使用变量名传递会改变物理地址的内容,使用c[0:-1]是值传递。 注意使用系统变量仅仅是传递值。 |