當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。