VxMat 语言参考-自定义过程和函数

郑鹏飞4年前自定义函数47073

定义函数:

function 函数名(参数1,参数2 ...)
//....
return 返回数据表达式
end function


function这个标识可以写成 fn, fun, func, 函数 ....

同理,end function 里的function也可以写成 fn,fun,func....

也可以写 

end 函数名


函数的访问方式:

test 参数 ...

test(参数...) //如果没有参数,可以有括号,也可以没有

a=test(参数) //如果没有参数,可以有括号,也可以没有


1、支持递归

2、动态参数:可以不写参数。访问时,在函数体内自动生成 VXPARAMLIST 数组,可以通过它来访问相应的参数

fn main
test 1,2,3,4,5
end main

fn test 
print vxparamlist(1),vxparamlist(2),vxparamlist(3)
end test


3、如果函数定义时定义了参数:

(1)只定义了一个参数时:如果传入多个参数,会将传入的参数组成一个数组赋给定义的参数名

(2)如果定义了多个参数时:如果传入多个参数,会按顺序一一赋给定义的参数,多的参数被丢弃,不够的参数会被赋值成空

            如果传入一个参数,则所有定义的参数都会赋值成传入的参数值

4、返回:

(1)可以显式的用 return 表达式返回数据,则return 后面的语句不会被执行

(2)如果没有return 语句,也可以用 函数名=表达式 的方式对返回数据进行赋值,在函数运行结束返回时,该表达式的值会被返回

5、可以用 exit function 退出函数


关于携带大量数据返回:

最好是显式的给返回的数据进行赋值后再对返回的数据进行访问操作,否则可能会造成内存溢出问题。如

正确的写法:

fn main
i=0
while i<100
i=i+1
y=test //当test函数携带超大量的数据返回时,在循环内由于都是用同一个变量y对其接收,
            //每次接收时原来的数据都会被正确的清理,所以不会造成循环内的内存溢出异常
print y.max 
//...
loop
end main



错误的写法:

fn main
i=0
while i<100
i=i+1
y=test.max
print y //当test返回有超大量的数据时,在循环内会生成非常多的携带返回数据的临时变量并得不到清理,造成循环的内存溢出异常
//...
loop
end main

fn test
    return [1:30000000] //或者是 rnd(1,30000000)
end test


我是郑鹏飞。 如果您觉得我的文章对您有帮助,可以点击站点上的 关于站点/支持和帮助
转载请注明 : 文章转载自不了阁-飞哥 blog.forbs.cn
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载请务必注明出处,尊重他人劳动成果共创和谐网络环境。

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。