# Func 对象

    class Func extends Object

表示可自定义或内置的函数.

有关其他可以像函数一样调用的对象的信息, 请参阅函数对象.

`Closure` 类继承 `Func`, 但没有定义任何新的属性.

对于脚本中的每个内置函数或函数定义, 都有一个相应的只读变量, 其中包含一个 Func 对象. 这个变量直接用于调用函数, 但它的值也可以被读取, 以检索函数本身, 作为一个值. 例如:

    InspectFn StrLen
    InspectFn InspectFn

    InspectFn(fn)
    {
        ; 显示所传函数的信息.
        MsgBox fn.Name "() is " (fn.IsBuiltIn ? "built-in." : "user-defined.")
    }

下面使用 "FuncObj" 作为任何 Func 对象的占位符, 因为 "Func" 就是类本身.

除了从 Object 继承的方法和属性外, Func 对象还具有以下预定义的方法和属性.

## 目录

- 方法:
  - Call: 调用函数.
  - Bind: 绑定参数到函数并返回一个绑定函数对象.
  - IsByRef: 确定参数是否为 ByRef 类型.
  - IsOptional: 确定参数是否是可选的.
- 属性:
  - Name: 返回函数的名称.
  - IsBuiltIn: 如果为内置函数, 则返回 1(true), 否则返回 0(false).
  - IsVariadic: 如果函数为可变参数, 则返回 1(true), 否则返回 0(false).
  - MinParams: 返回所需参数的数量.
  - MaxParams: 对于用户定义函数返回正式声明的参数数目, 对于内置函数返回最大的参数数目.

## 方法

### Call

调用一个函数.

    FuncObj(Param1, Param2, ...)
    FuncObj.Call(Param1, Param2, ...)

Param1, Param2, ...
  参数和返回值由函数定义.

调用一个值时, "Call" 方法是隐式的, 所以不需要显式指定.

### Bind

为函数绑定参数并返回绑定函数对象.

    BoundFunc := FuncObj.Bind(Param1, Param2, ...)

Param1, Param2, ...
  任意数量的参数.

有关详情和示例, 请参阅绑定函数对象.

### IsByRef

确定一个参数是否为 ByRef(按地址传递) 类型.

    Boolean := FuncObj.IsByRef(ParamIndex)

ParamIndex

  类型: 整数

  可选: 基于 1 的参数索引. 如果省略, Boolean 表示此函数是否含有 ByRef 参数.

返回指示参数是否为 ByRef 的布尔值. 如果 ParamIndex 无效时, 则抛出异常.

### IsOptional

确定一个参数是否是可选的.

    Boolean := FuncObj.IsOptional(ParamIndex)

ParamIndex

  类型: 整数

  可选: 基于 1 的参数索引. 如果省略, Boolean 表示此函数是否含有可选参数.

返回指示参数是否为可选参数的布尔值. 如果 ParamIndex 无效, 则抛出异常.

如果此函数是可变参数的, 那么参数可以不进行正式声明. 支持内置函数.

## 属性

### Name

返回函数的名称.

    FunctionName := FuncObj.Name

### IsBuiltIn

内置函数返回 1(true), 否则返回 0(false).

    Boolean := FuncObj.IsBuiltIn

### IsVariadic

如果函数为可变参数时返回 1(true), 否则返回 0(false).

    Boolean := FuncObj.IsVariadic

### MinParams

返回函数必要参数的数目.

    ParamCount := FuncObj.MinParams

### MaxParams

对于用户定义函数返回正式声明的参数数目, 对于内置函数返回最大的参数数目.

    ParamCount := FuncObj.MaxParams

如果函数是可变参数的, ParamCount 表示函数在不考虑 "variadic*" 可变参数的情况下可接受的最大参数数目.

dftg