字符串常量

简介: 字符串常量

我们可以使用一对双引号单引号来声明字符串常量(literal string):

a = "a line"
b = 'another line'


使用双引号和单引号声明字符串是等价的。他们两者唯一的区别在于,使用双引号声明的字符串中出现单引号时,单引号可以不用转义;使用单引号声明的字符串中出现双引号时,双引号可以不用转义。


从代码风格上看,大多数程序员会选择使用相同的方式来声明"同一类"字符串,至于"同一类"究竟具体指什么则是依赖于具体实现的。比如,由于 XML 文本中一般都会有双引号,所以一个操作 XML 的库可能就会使用单引号来声明 XML 片段。


Lua 语言中的字符串支持下列 C 语言风格的转义字符

转义字符 含义
\a 响铃(bell)
\b 退格(back space)
\f 换页(form feed)
\n 换行(newline)
\r 回车(carriage return)
\t 水平制表符(horizontal tab)
\v 垂直制表符(vertical tab)
\ 反斜杠(backslash)
\" 双引号(double quote)
\' 单引号(single quote)


下述示例展示了转义字符的使用方法:

> print("one line\nnext line\n\"in quotes\", 'in quotes'")
one line
next line
"in quotes", 'in quotes'
> print('a backslash inside quotes: \'\\\'')
a backslash inside quotes: '\'
> print("a simpler way: '\\'")
a simpler way: '\'


在字符串中,还可以通过转义序列 \ddd\xhh 来声明字符,其中, ddd 是由最多 3十进制数字组成的序列, hh 是由两个且必须是两个十六进制数字组成的序列。举一个稍微有点刻意的例子,在一个使用 ASCII 编码的系统中, "ALO\n123"'\x41L0\10\04923"' 实际上是一样的: 0x41 (十进制的 65 )在 ASCII 编码中对应 A10 对应换行符49 对应数字 1 (在这个例子中,由于转义序列之后紧跟了其他的数字,所以 49 必须写成 \049 ,即用 0补足三位数字,否则, Lua 语言会将其错误地解析为 \492 )。我们还可以把上述字符串写成 '\x41\x4c\x0a\x31\x32\x33\x22' ,即使用十六进制来表示字符串中的每一个字符。


Lua5.3 开始,也可以使用转义序列 \u{h...h} 来声明 UTF-8 字符,花括号中可以支持任意有效的十六进制

> "\u{3b1} \u{3b2} \u{3b3}"   --> α β γ


提示

终端使用 UTF-8 编码才能正确输出

目录
相关文章
|
5月前
|
存储 C++
c++字符和不常见常量
c++字符和不常见常量
49 0
|
Java 编译器 C语言
深入Java源码剖析之字符串常量
深入Java源码剖析之字符串常量
|
5月前
|
存储 Java 编译器
字符串常量和字符串字面值
字符串常量和字符串字面值
61 1
|
5月前
|
存储 C语言
字符指针变量与字符数组的比较
字符指针变量与字符数组的比较
39 3
|
5月前
|
存储 Java 编译器
字符串常量和字符串字面值:区别与联系
字符串常量和字符串字面值:区别与联系
|
5月前
|
C语言
C语言常量与变量、字符串与转义字符
C语言常量与变量、字符串与转义字符
37 0
|
5月前
|
存储 编译器 程序员
C++中的宏定义和字符串字面值的区别
C++中的宏定义和字符串字面值的区别
|
5月前
|
存储 程序员 C++
使用字符指针变量和字符数组的比较
使用字符指针变量和字符数组的比较
60 1
|
5月前
字符串常量
字符串常量。
39 0
|
5月前
|
机器学习/深度学习 存储
字符常量
字符常量。
45 0