# 变量与数据类型

URL: https://caijiao.org/lua/variables
Source: docs/lua/variables.md
Description: 学习 Lua 中的变量定义与常见数据类型，包括 nil、boolean、number、string、table 与 function。

Lua 是一门 **动态类型语言**，变量在首次赋值时自动确定类型，无需显式声明类型。  

所有变量默认是 **全局变量**，除非使用 `local` 关键字定义为局部变量。

## 🪶 变量定义

```lua
-- 全局变量
x = 10

-- 局部变量
local y = 20

print(x, y)  -- 输出：10  20
````

> 💡 建议：尽量使用 `local`，避免污染全局命名空间。

## 📊 数据类型一览

Lua 中共有 **8 种基本数据类型**：

| 类型名        | 说明                       |
| ---------- | ------------------------ |
| `nil`      | 空值，表示无效或未定义              |
| `boolean`  | 布尔值，取值为 `true` 或 `false` |
| `number`   | 数值类型（整数和浮点数统一）           |
| `string`   | 字符串                      |
| `table`    | 表（数组、字典等通用结构）            |
| `function` | 函数（可赋值给变量或作为参数传递）        |
| `userdata` | 用户自定义数据（C 语言交互）          |
| `thread`   | 协程（Coroutine）对象          |

## 🔢 数值类型（number）

Lua 默认使用 **双精度浮点数** 表示数值。

```lua
a = 10
b = 3.14
c = 1.2e3   -- 科学计数法：1200.0

print(a + b, c)
```

## 🧵 字符串（string）

Lua 中字符串可用单引号、双引号或 `[[ ]]` 多行定义。

```lua
name = "Lua"
version = '5.4'
desc = [[
Lua 是一门轻量级脚本语言，
常用于嵌入式系统。
]]

print(name .. " " .. version)  -- 字符串拼接用 ..
```

## 🧱 布尔值（boolean）

只有 `false` 和 `nil` 被认为是假（false），其余值（包括 0 和空字符串）都为真（true）。

```lua
if 0 then
  print("0 也为真")
end
```

## 🧩 nil 类型

`nil` 表示“无”或“未定义”，用于清除变量或检测空值。

```lua
local value = nil
print(type(value))  -- 输出：nil

value = 42
value = nil         -- 清除变量
```

## 🗃️ 表（table）

表（Table）是 Lua 中最重要的数据结构，可同时充当数组、字典、对象等。

```lua
t = { name = "Alice", age = 20 }

print(t.name)      -- 访问键值
t.city = "Tokyo"   -- 动态新增字段
```

## 🧠 小结

* 使用 `local` 定义局部变量
* Lua 拥有 8 种基本数据类型
* 字符串拼接使用 `..`
* 只有 `false` 与 `nil` 为假

在下一章中，我们将学习 **流程控制语句**，包括条件判断与循环结构。
