func fn(a=v,…) … {return xi}

阅读(935) 标签: 定义, 函数功能块,

描述:

定义子程序功能块。

语法

func  fn(a=v,...)

{return xi}

备注

定义一个子程序功能块完成计算后可以返回或者不返回结果。

子程序名称为fnfunc  fn(a=v,...)作为起始符子程序内容是以func fn(a=v,...)所在单元格为主格的代码块。通过return返回函数的运算结果并结束函数代码块,子程序执行完未碰到return将缺省返回代码块中最后一个计算格值。

参数:

fn

子程序名称。

a

定义参数。

参数定义前加$时表示字符串,调用时不必写引号,参数不进行计算处理直接将原串传入子程序中,”$参数名称格式定义的参数称为宏参数。

v

参数a的缺省值。

选项:

@i

子程序中无递归计算时,使用该选项可提高性能

@m

以宏方式调用,函数体只有一句表达式,其中不得改变其它变量

@o

使用@o选项定义子程序,调用式中fn@o中的o将作为第一个(字符串)参数,调用式中没有指定选项时则认为第一个(字符串)参数传递为空值。

返回值:

程序的计算结果

示例:

 

A

B

 

1

func ft(arg1=3)

 

定义一个名为ft的子程序,arg1为子程序中的参数,arg1参数值缺省为3,程序计算完成后返回B2的值。

2

 

=arg1*10

3

 

return B2

 

4

=ft(2)

 

调用ft子程序,传入参数值为2,结果返回20

5

=ft()

 

调用ft子程序,参数使用缺省值,结果返回30

  使用@o选项:

 

A

B

 

1

func ft@o(opt,s)

 

使用@o方式定义一个名为ft的子程序,opts为子程序中的参数;

子程序ft支持使用@u@l选项,@u时将字符串s转为大写,@l时将字符串s转为小写,选项缺省时返回字符串s的长度。

2

 

=if(opt=="u":upper(s),opt=="l":lower(s);len(s))

3

 

return B2

4

=ft@l("Hello")

 

调用ft子程序,使用@l选项,将字符串"Hello"转为小写,结果返回:"hello"

5

=ft@u("Hello")

 

调用ft子程序,使用@u选项,将字符串"Hello"转为大写,结果返回:"HELLO"

6

=ft("Hello")

 

调用ft子程序,选项省略时计算字符串"Hello"的长度,结果返回:5

  使用宏参数:

 

A

B

 

1

func f1($arg1)

 

定义一个名为f1的子程序,arg1为子程序中的宏参数,调用时不必写引号;子程序中计算字符串参数arg1的长度后返回。

2

 

=len(arg1)

3

 

return B2

4

=f1("abc")

 

调用f1子程序,将字符串"abc"整体作为参数值传入子程序,结果返回:5

5

=f1(abc)

 

调用f1子程序,结果返回:3

  使用@m选项:

 

A

B

 

1

func MA@m(fd1,n )

 

 

使用@m选项定义子程序,之后可以宏方式调用。

2

 

=fd1[-n:-1].avg()

3

 

 

4

=file("D:/srd.txt").import@t()

 

返回序表:

5

=A4.derive(MA(Closing,5):MA5 )

 

以宏方式调用子程序,计算5 日移动平均线数值作为新的列添加到序表A4中:

A5调用子程序计算时,相当于执行表达式=A4.derive(Closing[-5:-1].avg():MA5 )