TOML
[Tom 的(语义)明显、(配置)最小化的语言]
为人而生的配置文件格式。
TOML 旨在成为一个语义明显且易于阅读的最小化配置文件格式。TOML 被设计成可以无歧义地映射为哈希表。TOML 应该能很容易地被解析成各种语言中的数据结构。
# 这是一个 TOML 文档
title = "TOML 示例"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00
[database]
enabled = true
ports = [ 8000, 8001, 8002 ]
data = [ ["delta", "phi"], [3.14] ]
temp_targets = { cpu = 79.5, case = 72.0 }
[servers]
[servers.alpha]
ip = "10.0.0.1"
role = "前端"
[servers.beta]
ip = "10.0.0.2"
role = "后端"
-
-
TOML 旨在成为一个最小化配置文件格式,它:
- 语义明显易于阅读
- 能无歧义地映射为哈希表
- 易于解析成各种语言中的数据结构
-
-
- 键/值对
- 数组
- 表
- 内联表
- 表数组
- 整数 & 浮点数
- 布尔值
- 日期 & 时刻,带可选的时区偏移
-
-
TOML 已经拥有大多数当今使用的最流行的编程语言的实现:C、C#、C++、Clojure、Dart、Elixir、Erlang、Go、Haskell、Java、JavaScript、Lua、Objective-C、Perl、PHP、Python、Ruby、Rust、Scala、Swift…以及更多。
快速上手 TOML
注释
TOML 认为配置文件都应当支持注释。
# 这是一条 TOML 注释
# 这是一个多行的
# TOML 注释
强大的字符串
有四种方式表示字符串:基本字符串、多行基本字符串、字面量和多行字面量。基本字符串由引号包裹:
str1 = "I'm a string."
str2 = "You can \"quote\" me."
str3 = "Name\tJos\u00E9\nLoc\tSF."
多行基本字符串由三个引号包裹,允许折行。用行末反斜杠自动剔除非空白字符前的任何空白字符:
str1 = """
Roses are red
Violets are blue"""
str2 = """\
The quick brown \
fox jumps over \
the lazy dog.\
"""
str2
变成 "The quick brown fox jumps over the lazy dog."
(一个没有换行的单句)。
字面量字符串由单引号包裹。没有转义行为故而所见即所得:
path = 'C:\Users\nodejs\templates'
path2 = '\\User\admin$\system32'
quoted = 'Tom "Dubs" Preston-Werner'
regex = '<\i\c*\s*>'
由于没有转义,无法在由单引号包裹的字面量字符串中写入单引号。这里就迎来了多行字面量字符串:
re = '''I [dw]on't need \d{2} apples'''
lines = '''
原始字符串中的
第一个换行被剔除了。
所有其它空白
都保留了。
'''
数字
整数、浮点数、无穷甚至非数都是支持的。你可以用科学计数法甚至千分符。
# 整数
int1 = +99
int2 = 42
int3 = 0
int4 = -17
# 十六进制带有前缀 `0x`
hex1 = 0xDEADBEEF
hex2 = 0xdeadbeef
hex3 = 0xdead_beef
# 八进制带有前缀 `0o`
oct1 = 0o01234567
oct2 = 0o755
# 二进制带有前缀 `0b`
bin1 = 0b11010110
# 小数
float1 = +1.0
float2 = 3.1415
float3 = -0.01
# 指数
float4 = 5e+22
float5 = 1e06
float6 = -2E-2
# both
float7 = 6.626e-34
# 分隔符
float8 = 224_617.445_991_228
# 无穷
infinite1 = inf # 正无穷
infinite2 = +inf # 正无穷
infinite3 = -inf # 负无穷
# 非数
not1 = nan
not2 = +nan
not3 = -nan
日期与时刻
TOML 支持日期、时刻、日期时刻,带或者不带时区偏移。
# 坐标日期时刻
odt1 = 1979-05-27T07:32:00Z
odt2 = 1979-05-27T00:32:00-07:00
odt3 = 1979-05-27T00:32:00.999999-07:00
# 各地日期时刻
ldt1 = 1979-05-27T07:32:00
ldt2 = 1979-05-27T00:32:00.999999
# 各地日期
ld1 = 1979-05-27
# 各地时刻
lt1 = 07:32:00
lt2 = 00:32:00.999999