
- Elixir 教程
- Elixir - 首頁
- Elixir - 概述
- Elixir - 環境
- Elixir - 基本語法
- Elixir - 資料型別
- Elixir - 變數
- Elixir - 運算子
- Elixir - 模式匹配
- Elixir - 決策
- Elixir - 字串
- Elixir - 字元列表
- Elixir - 列表和元組
- Elixir - 關鍵字列表
- Elixir - 對映
- Elixir - 模組
- Elixir - 別名
- Elixir - 函式
- Elixir - 遞迴
- Elixir - 迴圈
- Elixir - 可列舉
- Elixir - 流
- Elixir - 結構體
- Elixir - 協議
- Elixir - 檔案 I/O
- Elixir - 程序
- Elixir - 符號
- Elixir - 推導式
- Elixir - 型別規範
- Elixir - 行為
- Elixir - 錯誤處理
- Elixir - 宏
- Elixir - 庫
- Elixir 有用資源
- Elixir - 快速指南
- Elixir - 有用資源
- Elixir - 討論
Elixir - 符號
在本章中,我們將探索符號,即語言提供用於處理文字表示的機制。符號以波浪號 (~) 字元開頭,後跟一個字母(識別符號號),然後是一個分隔符;可以選擇在最終分隔符之後新增修飾符。
正則表示式
Elixir 中的正則表示式是符號。我們在字串章節中已經看到過它們的用法。讓我們再舉一個例子,看看如何在 Elixir 中使用正則表示式。
# A regular expression that matches strings which contain "foo" or # "bar": regex = ~r/foo|bar/ IO.puts("foo" =~ regex) IO.puts("baz" =~ regex)
執行上述程式時,會產生以下結果:
true false
符號支援 8 種不同的分隔符:
~r/hello/ ~r|hello| ~r"hello" ~r'hello' ~r(hello) ~r[hello] ~r{hello} ~r<hello>
支援不同分隔符的原因是,不同的分隔符可能更適合不同的符號。例如,對正則表示式使用括號可能是一個令人困惑的選擇,因為它們可能與正則表示式內部的括號混淆。但是,括號對於其他符號可能非常方便,我們將在下一節中看到。
Elixir 支援與 Perl 相容的正則表示式,也支援修飾符。您可以閱讀有關正則表示式用法的更多資訊 這裡。
字串、字元列表和單詞列表
除了正則表示式之外,Elixir 還有 3 個內建符號。讓我們看看這些符號。
字串
~s 符號用於生成字串,就像雙引號一樣。例如,當字元串同時包含雙引號和單引號時,~s 符號很有用:
new_string = ~s(this is a string with "double" quotes, not 'single' ones) IO.puts(new_string)
此符號生成字串。執行上述程式時,會產生以下結果:
"this is a string with \"double\" quotes, not 'single' ones"
字元列表
~c 符號用於生成字元列表:
new_char_list = ~c(this is a char list containing 'single quotes') IO.puts(new_char_list)
執行上述程式時,會產生以下結果:
this is a char list containing 'single quotes'
單詞列表
~w 符號用於生成單詞列表(單詞只是普通的字串)。在 ~w 符號內,單詞由空格分隔。
new_word_list = ~w(foo bar bat) IO.puts(new_word_list)
執行上述程式時,會產生以下結果:
foobarbat
~w 符號還接受c、s 和a 修飾符(分別用於字元列表、字串和原子),它們指定結果列表中元素的資料型別:
new_atom_list = ~w(foo bar bat)a IO.puts(new_atom_list)
執行上述程式時,會產生以下結果:
[:foo, :bar, :bat]
符號中的插值和轉義
除了小寫符號外,Elixir 還支援大寫符號來處理跳脫字元和插值。雖然 ~s 和 ~S 都會返回字串,但前者允許轉義程式碼和插值,而後者則不允許。讓我們考慮一個例子來理解這一點:
~s(String with escape codes \x26 #{"inter" <> "polation"}) # "String with escape codes & interpolation" ~S(String without escape codes \x26 without #{interpolation}) # "String without escape codes \\x26 without \#{interpolation}"
自定義符號
我們可以輕鬆建立自己的自定義符號。在本例中,我們將建立一個符號將字串轉換為大寫。
defmodule CustomSigil do def sigil_u(string, []), do: String.upcase(string) end import CustomSigil IO.puts(~u/tutorials point/)
當我們執行上述程式碼時,會產生以下結果:
TUTORIALS POINT
首先,我們定義一個名為 CustomSigil 的模組,並在該模組中,我們建立了一個名為 sigil_u 的函式。由於現有符號空間中不存在 ~u 符號,因此我們將使用它。_u 表示我們希望使用 u 作為波浪號後面的字元。函式定義必須接受兩個引數,一個輸入和一個列表。