# url.build

## 功能

从对象配置构建 URL 字符串。

## 语法

```bt
url(config).build()
url('').build(config)
```

## 参数

| 参数 | 类型 | 必填 | 默认值 | 说明 |
| ------ | ------ | ------ | ------ | ------ |
| config | Object | 否 | 构造 url 时传入的对象 | URL 配置对象。 |

## config 对象字段

| 字段 | 类型 | 必填 | 默认值 | 说明 |
| ------ | ------ | ------ | ------ | ------ |
| scheme | String | 否 | `http` | URL scheme，不需要写 `://`。 |
| host | String | 否 | 空字符串 | 主机名或 IP。没有 host 时仍会按当前实现生成 `scheme://` 开头的 URL。 |
| port | Int/String | 否 | 无 | 端口号。字段值不是 `empty` 或 `null` 时会原样转字符串拼到 host 后。 |
| path | String | 否 | `/` | URL 路径。不以 `/` 开头时会自动补 `/`。 |
| query | Object/String/Any | 否 | 无 | 查询字符串。Object 会按键值逐项 URL 编码；String 原样作为查询字符串；其它值先转字符串。空字符串不会写入 `?`。 |
| fragment | String | 否 | 无 | URL fragment，不需要写 `#`；写入时会做百分号编码。 |
| username | String | 否 | 无 | 用户名。非空时会写入 `username@`，并做百分号编码。 |
| password | String | 否 | 无 | 密码。只有 `username` 非空时才会写入，并做百分号编码。 |

## 返回值

| 类型 | 说明 |
| ------ | ------ |
| String | 构建后的 URL。 |

## 代码示例

```bt
result = url({scheme: 'https', host: 'btlang.org', path: '/docs', query: {q: 'BT Lang'}}).build()

// 输出：https://btlang.org/docs?q=BT%20Lang
print result
```

## 注意事项

- `query` 为 Object 时，字段名和值都会按 URL 组件规则编码。
- `build()` 只做轻量字符串构建，不校验 host 是否为空，也不检查 scheme 是否真实存在。
