Elixir 印记的插值与逃避

2023-12-16 20:46 更新
除了小写印记,Elixir也支持用于处理转义字符与插值的大写印记.虽然~s~S都会返回字符串,但前者支持转义代码和插值,而后者不支持:
iex> ~s(String with escape codes \x26 #{"inter" <> "polation"})
"String with escape codes & interpolation"
iex> ~S(String without escape codes \x26 without #{interpolation})
"String without escape codes \\x26 without \#{interpolation}"

下列转义代码可以用于字符串和字符列表:

\" – 双引号
\' – 单引号
\\ – 单反斜杠
\a – 响铃/警告
\b – 推格
\d - 删除
\e - 退出
\f - 换页符
\n – 换行符
\r – 回车
\s – 空格
\t – 制表符
\v – 垂直制表符
\0 - 空字节
\xDD - 以16进制表示单字节 (例如 \x13)
\uDDDD and \u{D...} - 以16进制表示Unicode代码点 (例如 \u{1F600})

印记也支持大段注释,以三个单引号或双引号分隔:

iex> ~s"""
...> this is
...> a heredoc string
...> """

大段注释印记最常用于书写文档.例如,在文档中书写转义字符会很麻烦,因为需要对某些符号使用双重转义:

@doc """
Converts double-quotes to single-quotes.

## Examples

    iex> convert("\\\"foo\\\"")
    "'foo'"

"""
def convert(...)

使用​~S​,这些问题就可以避免:

@doc ~S"""
Converts double-quotes to single-quotes.

## Examples

    iex> convert("\"foo\"")
    "'foo'"

"""
def convert(...)


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号