语法与类型
本文介绍 Tableau 的基本语法、变量声明和数据类型。
概述
Tableau 的大部分语法和类型借鉴自 Protocol Buffers (proto3) 和 Golang。
Scalar types(标量类型)
详细说明请参考 Protocol Buffers Proto3 Scalar。
| 类别 | 类型 | 默认值 |
|---|---|---|
| 数值 | int32, uint32int64, uint64float, double | 000.0 |
| 布尔值 | bool | false |
| 字符串 | string | "" |
| 字节 | bytes | "" |
Composite types(复合类型)
| 类型 | 说明 |
|---|---|
struct | struct 映射为 protobuf 的 message。 |
list | list 映射为 protobuf 的 repeated 字段。 |
map | map 映射为 protobuf 的 map 字段。 |
Struct(结构体)
| 特性 | 说明 |
|---|---|
| 横向布局(Horizontal layout) | 每个标量字段占一个单元格。 |
| 简单 in-cell struct | 每个字段必须是标量类型。 以逗号分隔的字段列表,例如: 1,test,3.0。若数据列表长度与 struct 字段数不一致,则按顺序填充,未配置的字段使用标量类型的默认值。 |
List(列表)
| 特性 | 说明 |
|---|---|
| 横向布局(Horizontal layout) | list 的默认布局。 元素类型可以是 struct 或标量。 |
| 纵向布局(Vertical layout) | list 的元素类型应为 struct。 |
| 简单 in-cell list | 元素类型必须是标量。 以逗号分隔的元素列表,例如: 1,2,3。 |
| 可扩展(Scalable) | 支持动态大小的 list。 |
| 忽略空元素 | 智能识别任意位置的空元素。 |
Map(映射)
| 特性 | 说明 |
|---|---|
| 横向布局(Horizontal layout) | |
| 纵向布局(Vertical layout) | map 的默认布局。 |
| Hash map | 实现为无序 map 或 hash map。 |
| Ordered map | 由 tableauio/loader 支持。 - C++ |
| 简单 in-cell map | key 和 value 都必须是标量类型。 以逗号分隔的 key:value 对列表,例如:1:10,2:20,3:30。 |
| 可扩展(Scalable) | 支持动态大小的 map。 |
| 忽略空条目 | 智能识别任意位置的空条目。 |
Enumeration(枚举)
| 特性 | 说明 |
|---|---|
| 三种枚举值形式 | 1. 枚举值编号(number)。 2. 枚举值名称(name)。 3. 枚举值别名(alias,通过 EnumValueOptions 指定)。 |
| 校验 | 自动检查枚举值的合法性。 |
Empty value(空值)
| 类型 | 说明 |
|---|---|
| scalar | 空标量将使用该标量类型的默认值填充。 |
| struct | 若所有字段均为空,则不会生成该 struct。 |
| list | 若 list 大小为 0,则不会生成该 list。 若 list 的元素(struct 类型)为空,则不会追加该元素。 |
| map | 若 map 大小为 0,则不会生成该 map。若 map 的 value(struct 类型)为空,则不会插入该条目。 |
| nesting | 递归地判断是否为空。 |