当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Macro.unescape_string用法及代码示例


Elixir语言中 Macro.unescape_string 相关用法介绍如下。

用法一

unescape_string(string)
@spec unescape_string(String.t()) :: String.t()

取消转义给定的字符。

这是 Elixir 单引号和双引号字符串中默认使用的非转义行为。检查 unescape_string/2 以获取有关如何自定义转义Map的信息。

在此设置中,Elixir 将转义以下内容:\0 , \a , \b , \d , \e , \f , \n , \r , \s , \t\v。字节可以通过\xNN 以十六进制形式给出,Unicode 代码点可以通过\uNNNN 转义。

此函数通常用于接收原始未转义字符串的 sigil 实现(如 ~r~s 等)。

例子

iex> Macro.unescape_string("example\\n")
"example\n"

在上面的示例中,我们传递了一个带有\n 转义的字符串,并返回一个未转义的版本。

用法二

unescape_string(string, map)
@spec unescape_string(String.t(), (non_neg_integer() -> non_neg_integer() | false)) ::
  String.t()

根据给定的Map对给定的字符进行转义。

如果要使用与 Elixir 单引号和双引号字符串相同的映射,请检查 unescape_string/1

Map

Map必须是一个函数。该函数接收一个整数,表示它想要取消转义的字符的代码点。下面是 Elixir 实现的默认映射函数:

def unescape_map(:newline), do: true
def unescape_map(:unicode), do: true
def unescape_map(:hex), do: true
def unescape_map(?0), do: ?0
def unescape_map(?a), do: ?\a
def unescape_map(?b), do: ?\b
def unescape_map(?d), do: ?\d
def unescape_map(?e), do: ?\e
def unescape_map(?f), do: ?\f
def unescape_map(?n), do: ?\n
def unescape_map(?r), do: ?\r
def unescape_map(?s), do: ?\s
def unescape_map(?t), do: ?\t
def unescape_map(?v), do: ?\v
def unescape_map(e), do: e

如果 unescape_map/1 函数返回 false ,则字符不会转义,反斜杠将保留在字符串中。

如果映射为 :newline:unicode:hex 分别返回 true ,则换行符、Unicode 和十六进制代码点将被转义。

例子

使用上面定义的unescape_map/1 函数很容易:

Macro.unescape_string("example\\n", &unescape_map(&1))

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Macro.unescape_string(string)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。