# 匿名函数

> 

Dujie 支持匿名函数。语法与普通函数一致，只是没有名字。

## 基本形式

```dj
func(x: int) -> string {
    `#${x}`
}
```

## 作为回调使用

匿名函数当前主要用于目标参数类型已知的位置，例如 `iter.map`：

```dj
let numbers: list<int> = [1, 2, 3];

let result = iter(numbers).map(func(x: int) -> string {
    `#${x}`
}).collect();
```

## 捕获外部变量

匿名函数允许捕获外部变量，使用词法作用域：

```dj
let prefix = "item: ";

let result = iter(["a", "b"]).map(func(x: string) -> string {
    `${prefix}${x}`
}).collect();
```

## 当前边界

第一阶段先只把匿名函数作为回调使用，不展开完整一等函数值系统。

当前不建议依赖这些能力：

- 把匿名函数存入变量
- 把匿名函数作为普通返回值返回
- 把匿名函数存入结构体字段或容器
- 在匿名函数里修改捕获的外部绑定
