Elixir 自定義印記

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

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

iex> h sigil_r
...

我們也可以簡單地在sigil_{identifier}模式之后添加需要實現(xiàn)的函數(shù)來自定義我們的印記.例如,讓我們用~i印記來返回一個整數(shù)(使用修飾符n可以將其變?yōu)樨摂?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

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號