# 基本类型

> 

## `string`

`string` 表示文本，不是字节数组。

```dj
let name: string = "world";
let greeting: string = `hello ${name}`;
```

规则：

- 使用 `"..."` 声明普通字符串
- 支持插值字符串 ``...${expr}...``
- 支持比较运算
- 不支持算术运算
- 不支持下标访问
- 不支持直接 `for in` 迭代

普通字符串支持这些转义：

- `\\`
- `\"`
- `\n`
- `\r`
- `\t`
- `\u{...}`

## `rune`

`rune` 表示单个字符，是独立基础类型，不等同于长度为 1 的 `string`。

```dj
let a: rune = 'a';
let c: rune = '你';
```

规则：

- 使用 `'...'` 声明
- 转义展开后必须恰好对应一个字符
- 支持比较运算
- 不做隐式数值化

`rune` 支持这些转义：

- `\\`
- `\'`
- `\n`
- `\r`
- `\t`
- `\u{...}`

## `int`

`int` 是当前唯一公开整数类型。

```dj
let age: int = 25;
let count: int = -10;
```

规则：

- 当前整数类型只有 `int`
- 支持 `+ - * / %`
- `int / int -> int`
- 不与 `float` 混合运算

## `float`

`float` 是双精度浮点数。

```dj
let pi: float = 3.14;
let ratio: float = 0.5;
```

规则：

- 支持 `+ - * /`
- 不支持 `%`
- 不与 `int` 混合运算
- 显式转换可使用 `int(x)` 和 `float(x)`

## `bool`

`bool` 表示真或假。

```dj
let ok: bool = true;
let done: bool = false;
```

规则：

- 支持 `==` / `!=`
- 不支持大小比较
- 可用于 `if`、`&&`、`||`、`!`

## 插值字符串

插值字符串整体类型是 `string`：

```dj
let name = "Alice";
let count = 3;
let msg = `hello ${name}, count=${count}`;
```

当前插值允许任意类型，但采用展示语义，不是序列化语义。
