Elixir 自定義印記

2023-12-16 20:46 更新
正如本章開始時(shí)提到的,Elixir中的印記也具有擴(kuò)展性.事實(shí)上,使用印記~r/foo/i相當(dāng)于使用一個(gè)二進(jìn)制數(shù)和一個(gè)字符列表作為參數(shù)調(diào)用sigil_r:
iex> sigil_r(<<"foo">>, 'i')
~r"foo"i

我們可以通過(guò)sigil_r獲取~r印記的文檔:

iex> h sigil_r
...

我們也可以簡(jiǎn)單地在sigil_{identifier}模式之后添加需要實(shí)現(xiàn)的函數(shù)來(lái)自定義我們的印記.例如,讓我們用~i印記來(lái)返回一個(gè)整數(shù)(使用修飾符n可以將其變?yōu)樨?fù)數(shù)):

iex> defmodule MySigils do
...>   def sigil_i(string, []), do: String.to_integer(string)
...>   def sigil_i(string, [?n]), do: -String.to_integer(string)
...> end
iex> import MySigils
iex> ~i(13)
13
iex> ~i(42)n
-42

印記也可以在宏的幫助下進(jìn)行編譯時(shí)工作.例如,在編譯源代碼時(shí),Elixir中的正則表達(dá)式會(huì)被編譯成一個(gè)高效的表示方法,在運(yùn)行時(shí)就可以跳過(guò)此步驟.如果你對(duì)此感興趣,我們建議你學(xué)習(xí)宏的知識(shí),并了解印記是如何在Kernel模塊中被實(shí)現(xiàn)的(sigil_*函數(shù)就是在那里定義的).


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)