• IDL学习:语法基础-过程和函数


            本博客将介绍IDL语言中的文件模式,即执行文件中包含一个或多个功能模块代码的文件(后缀为“.pro”文件),这些功能模块只能是过程(Procedure)或函数(Function)。IDL中和matlab一样,处理命令行运行命令,也可以通过文件的方式来运行代码,不同的是IDL文件编写的代码需要编译或则调用来运行。

            注:matlab语言无需编译且没有过程Procedure概念,其实也就相当于IDL语言过程文件去掉首尾行。  

            过程与函数不同之处在于,过程是没有输出参数的函数是至多有一个输出参数(若需要输出多个参数,需以结构体、哈希表等形式进行输出参数)。

    1. 过程

    1.1 创建过程文件

            过程是包含若干个IDL代码构成的且能够进行编译的集合,过程具有严格的格式要求,必须以“Pro”开始,且以“End”结尾,不能有输出参数,运行时必须至少有一个相关联的Pro文件进行编译。语法如下:

    PRO Procedure_Name, argument1, ..., argumentn

       . . .

    END

    调用代码:

    Procedure_Name, argument1, ..., argumentn

    Procedure_Name表示过程名(文件名必须和过程名一致);argumentn表示参数;

            例子:下面是一个简单的过程文件代码,第一段是过程Procedure文件,第二段是调用的代码,打印两个参数的和

    1. Pro test_pro, A,B
    2. Print,A+B
    3. end
    1. >>.compile -v 'D:\Code\IDL\html_Example\test_pro.pro'
    2. % Compiled module: TEST_PRO.
    3. >>A = 1;
    4. >>B = 8
    5. >>test_pro,A,B
    6. 9
    7. >>

    1.2 进阶-输入参数可变

            实际使用的时候,常常使用的过程的入参个数都是可变的,最常见的就是Print过程,其后面可以接若干个输入参数,因此将讲解如何实现入参数可变。

            例子:下面第一段代码是过程Procedure文件,第二段是调用的代码,打印所有输入参数的和

    1. PRO Test_pro, A,B,C
    2. IF N_elements(C) EQ 0 THEN BEGIN
    3. Print, '未输入C,A+B=',A+B
    4. Return
    5. ENDIF
    6. Print, 'A+B+C=',A+B+C
    7. END
    1. >>.compile -v 'D:\Code\IDL\html_Example\test_pro.pro'
    2. % Compiled module: TEST_PRO.
    3. >>Test_pro,A,B,C
    4. A+B+C=hlz isOk
    5. >>Test_pro,A,B
    6. 未输入C,A+B=hlz is

             从运行结果可知,Test_pro,A,B和Test_pro,A,B,C都成功实现计算。其关键之处在于使用N_elements()函数If语句来判断是否有输入,从而根据实际输入来分别计算。

            注:再次强调,过程是无输出的,若要提前结束运行,只需加一个Return过程,后面不能接任何变量!!!

    2. 函数

    2.1 创建过程文件

            函数是包含若干个IDL代码构成的且能够进行编译的集合,过程具有严格的格式要求,必须以“Function”开始,且以“End”结尾,最多有一个输出参数,运行时必须至少有一个相关联的Pro文件进行编译。语法如下:

    Function Function _Name, argument1, ..., argumentn

       . . .

    END

    调用代码:

    Function _Nameargument1, ..., argumentn)

    Value = Function _Nameargument1, ..., argumentn)

    Function_Name表示函数名(文件名必须和函数名一致);argumentn表示参数;

            例子:下面第一段代码是过程Function文件,第二段是调用的代码,打印所有输入参数的和

    1. Function test_pro, A,B
    2. C = A+B
    3. Print,C
    4. Return,0
    5. end
    1. >>.compile -v 'D:\Code\IDL\html_Example\test_pro.pro'
    2. % Compiled module: TEST_PRO.
    3. >>A = 4
    4. >>B = 5
    5. >>test_pro(A,B)
    6. 9
    7. 0

            注:结果中第一个9是运行打印出来的,第二个数0,是因为 Return,0生成的。若需要输出参数则可以将代码Return,0改为Return,C即可。

    1. Function test_pro, A,B
    2. C = A+B
    3. Print,C
    4. Return,C
    5. end
    1. >>.RESET_SESSION
    2. >>.compile -v 'D:\Code\IDL\html_Example\test_pro.pro'
    3. % Compiled module: TEST_PRO.
    4. >>A = 4
    5. >>B = 5
    6. >>C = Test_pro(A,B)
    7. 9

    2.2 进阶-输入参数可变

           实际使用的时候,常常使用的函数的入参个数都是可变的,因此将讲解如何实现入参数可变。

           例子:下面第一段代码是过程Function文件,第二段是调用的代码,打印所有输入参数的和。

    1. Function Test_pro, A,B,C
    2. IF N_elements(C) EQ 0 THEN BEGIN
    3. D = A+B
    4. Print, '未输入C,A+B=',D
    5. Return,D
    6. ENDIF
    7. D = A+B+C
    8. Print, 'A+B+C=',D
    9. Return,D
    10. END
    1. >>.compile -v 'D:\Code\IDL\html_Example\test_pro.pro'
    2. % Compiled module: TEST_PRO.
    3. >>A = '江西省'
    4. >>B = '上饶市'
    5. >>C = '曹溪镇'
    6. >>D = Test_pro(A,B)
    7. 未输入C,A+B=江西省上饶市
    8. >>D = Test_pro(A,B,C)
    9. A+B+C=江西省上饶市曹溪镇
    10. >>

    最后再讲一个小技巧,可以用函数 KEYWORD_SET()判断是否有关键字,如果其参数已定义且非零,则返回1(true),否则返回0(false)。

    不对之处,敬请斧正!

    路漫漫其修远兮,吾将上下而求索!

  • 相关阅读:
    SpringMVC小记
    【深度学习】详解 MAE
    9月7日作业
    【linux】倒计时小程序
    创建自定义日志筛选器
    vue3项目的创建、入口文件、全局方法、生命周期函数、setup中的生命周期函数使用、data的函数方式
    在Android studio上开发APP之后,找不到应用图标,但是手机管家显示已经安装
    OpenHarmony语言基础类库【@ohos.url (URL字符串解析)】
    python读写各种文件
    Java毕业设计-疫情防控系统
  • 原文地址:https://blog.csdn.net/weixin_41649786/article/details/126866833