跳转到内容

Futurebasic/语言/参考/def fn expr

来自维基教科书,自由的教科书

DEF FN <expr> 语句

[编辑 | 编辑源代码]

DEF FN <expr>

[编辑 | 编辑源代码]

✔ 外观 ✔ 标准 ✔ 控制台

DEF FN functionName [(var1 [,var2 ...])] = expr

此语句定义一个“单行”函数。您可以在程序的后续部分使用以下形式的表达式来引用该函数:

   FN functionName [(parm1 [, parm2 ...])]

此表达式返回函数定义中expr的值。

DEF FN <expr>语句不应出现在任何LOCAL函数内部。

functionName可以是任何有效的FB标识符,它与程序中定义的任何其他函数名称不同。functionName可以选择性地以类型标识符后缀结束(例如%$&等)。

如果functionName以类型标识符后缀结束,则该后缀表示函数返回的数据类型(因此expr应为相同类型)。如果没有指定类型标识符后缀,则该函数返回一个长整型值。

您可以在函数定义中选择性地包含一个形式参数列表:这是一个用逗号分隔并用括号括起来的变量名称(var1var2等)列表,紧跟在functionName之后。通常,expr将包含对这些参数变量的引用。当您调用具有形式参数列表的函数时,您会在实际参数列表中传递值(parm1parm2等)。然后将这些值分配给var1var2等,并用于评估expr.

var1var2等必须是“简单”变量:它们不能是数组元素、记录或记录字段。parm1parm2等(除了一些例外)可以是任何类型的表达式,只要每个parm表达式的类型与形式参数列表中对应的var变量兼容即可。实际参数列表中的项数和顺序必须与形式参数列表中的项数和顺序完全匹配(如果有)。

形式参数列表中的变量是全局变量(如果它们先前在BEGIN GLOBALS...END GLOBALS部分中声明),或者它们是“主函数局部变量”。在这两种情况下,这意味着分配给这些变量的值(当您调用函数时)即使在函数返回值后也会保留。如果您随后在“主函数”(在所有LOCAL函数之外)中执行包含其中一个变量的某些语句,您需要牢记这一点。

expr可能包含除出现在形式参数列表中的变量之外的其他变量。expr中的所有变量都是全局变量(如在BEGIN GLOBALS...END GLOBALS块中声明)或主函数局部变量。

DEF FN Area!(r!) = pi# * r! * r!

LOCAL FN Circle6
  a! = FN Area!(6.0)
  PRINT a!
END FN

函数FN Area!计算圆的面积,其中圆的半径作为参数传递。我们假设变量pi#是一个全局变量或一个“主函数局部变量”,其值先前已设置为 3.14159...

当我们调用Circle6函数时,值 113.079 会被分配给局部变量a!。作为调用FN Area!(6.0)的副作用,主函数局部变量r!的值被更改为 6.0。

DEF FN <expr>是一个“不可执行”语句,这意味着您无法通过将DEF FN <expr>放在THENELSE之后(在IF语句中)来影响函数的定义,也无法将其放在任何类型的“条件执行”块中,例如LONG IF...END IFWHILE...WENDFOR...NEXT等。但是,您可以通过将DEF FN <expr>放在COMPILE LONG IF块中来影响函数定义(在编译时)。

DEF FN不适用于线程函数。

LOCAL FN; END FN; USING; FN <userFunction>; @FN; DEF FN USING <fnaddress>

华夏公益教科书