# 内建函数

> 

这一页只说明当前已经稳定的少量全局内建能力。

## 输出

```dj
print("hello")
println("hello")
eprint("error")
eprintln("error")
```

这些输出函数接受 `any`，主要用于调试和简单展示。

## `iter(...)`

`iter` 同时是内建参数化类型名和内建构造形式。

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

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

当前稳定写法可按下面理解：

- `iter(xs: list<T>) -> iter<T>`
- 它把稳定容器转换成遍历管道起点
- 具体的 `map / filter / collect` 方法见“复合类型”和“匿名函数”文档

## `panic`

```dj
panic("something went wrong")
```

规则：

- 参数类型是 `string`
- 调用后不会正常返回
- 常用于不可恢复的错误路径

## `assert`

`assert` 目前保留为内建调试能力。

```dj
assert(x > 0)
assert(x > 0, some("x must be positive"))
```

当前用户侧可按以下方式理解：

- 第一个参数是 `bool`
- 第二个参数如果提供，使用 `opt<string>`

## 说明

- `text / fragment / comment / element / main` 属于渲染内建，不在这一页重复说明
- `int(x)`、`float(x)` 属于显式类型转换
- `none`、`some(...)` 属于 `opt<T>` 的语言构造

更完整的设计背景见：

- `docs/01.design/18.built-in-functions.md`
- `docs/01.design/15.render-intrinsics.md`
