Elixir - 庫



Elixir 與 Erlang 庫具有極佳的互操作性。讓我們簡要討論幾個庫。

Binary 模組

內建的 Elixir String 模組處理以 UTF-8 編碼的二進位制資料。當處理不一定是 UTF-8 編碼的二進位制資料時,binary 模組很有用。讓我們考慮一個示例以進一步瞭解 Binary 模組 -

# UTF-8
IO.puts(String.to_char_list("Ø"))

# binary
IO.puts(:binary.bin_to_list "Ø")

執行上述程式時,會產生以下結果 -

[216]
[195, 152]

以上示例顯示了差異;String 模組返回 UTF-8 碼點,而 :binary 處理原始資料位元組。

Crypto 模組

crypto 模組包含雜湊函式、數字簽名、加密等。此模組不是 Erlang 標準庫的一部分,而是包含在 Erlang 發行版中。這意味著每當使用它時,都必須在專案的應用程式列表中列出 :crypto。讓我們看看使用 crypto 模組的示例 -

IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))

執行上述程式時,會產生以下結果 -

3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB

Digraph 模組

digraph 模組包含用於處理由頂點和邊構成的有向圖的函式。在構建圖形後,其中的演算法將有助於查詢例如兩個頂點之間的最短路徑或圖形中的迴圈。請注意,:digraph 中的函式會間接地作為副作用更改圖形結構,同時返回新增的頂點或邊。

digraph = :digraph.new()
coords = [{0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}]
[v0, v1, v2] = (for c <- coords, do: :digraph.add_vertex(digraph, c))
:digraph.add_edge(digraph, v0, v1)
:digraph.add_edge(digraph, v1, v2)
for point <- :digraph.get_short_path(digraph, v0, v2) do 
   {x, y} = point
   IO.puts("#{x}, #{y}")
end

執行上述程式時,會產生以下結果 -

0.0, 0.0
1.0, 0.0
1.0, 1.0

Math 模組

math 模組包含常見的數學運算,涵蓋三角函式、指數和對數函式。讓我們考慮以下示例以瞭解 Math 模組的工作原理 -

# Value of pi
IO.puts(:math.pi())

# Logarithm
IO.puts(:math.log(7.694785265142018e23))

# Exponentiation
IO.puts(:math.exp(55.0))

#...

執行上述程式時,會產生以下結果 -

3.141592653589793
55.0
7.694785265142018e23

Queue 模組

佇列是一種資料結構,它有效地實現了 (雙端) FIFO (先進先出) 佇列。以下示例顯示了 Queue 模組的工作原理 -

q = :queue.new
q = :queue.in("A", q)
q = :queue.in("B", q)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)

執行上述程式時,會產生以下結果 -

A
B
廣告

© . All rights reserved.