Elixir - ห้องสมุด
Elixir มอบความสามารถในการทำงานร่วมกันที่ยอดเยี่ยมกับห้องสมุด Erlang ให้เราพูดคุยสั้น ๆ เกี่ยวกับห้องสมุดสองสามแห่ง
โมดูลไบนารี
โมดูล Elixir String ในตัวจัดการไบนารีที่เข้ารหัส UTF-8 โมดูลไบนารีมีประโยชน์เมื่อคุณจัดการกับข้อมูลไบนารีที่ไม่จำเป็นต้องเข้ารหัส UTF-8 ให้เราพิจารณาตัวอย่างเพื่อทำความเข้าใจโมดูลไบนารีเพิ่มเติม -
# UTF-8
IO.puts(String.to_char_list("Ø"))
# binary
IO.puts(:binary.bin_to_list "Ø")
เมื่อรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังนี้ -
[216]
[195, 152]
ตัวอย่างข้างต้นแสดงความแตกต่าง โมดูล String ส่งคืนจุดรหัส UTF-8 ในขณะที่: ข้อตกลงไบนารีกับไบต์ข้อมูลดิบ
โมดูล Crypto
โมดูลการเข้ารหัสลับประกอบด้วยฟังก์ชันการแฮชลายเซ็นดิจิทัลการเข้ารหัสและอื่น ๆ โมดูลนี้ไม่ได้เป็นส่วนหนึ่งของไลบรารีมาตรฐาน Erlang แต่รวมอยู่ในการแจกแจง Erlang ซึ่งหมายความว่าคุณต้องแสดงรายการ: crypto ในรายการแอปพลิเคชันของโครงการเมื่อใดก็ตามที่คุณใช้งาน ให้เราดูตัวอย่างการใช้โมดูลการเข้ารหัส -
IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))
เมื่อรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังนี้ -
3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB
โมดูล Digraph
โมดูล digraph มีฟังก์ชันสำหรับจัดการกับกราฟกำกับที่สร้างจากจุดยอดและขอบ หลังจากสร้างกราฟแล้วอัลกอริทึมในนั้นจะช่วยในการค้นหาเช่นเส้นทางที่สั้นที่สุดระหว่างจุดยอดสองจุดหรือการวนซ้ำในกราฟ สังเกตว่าฟังก์ชันต่างๆin :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
โมดูลคณิตศาสตร์
โมดูลคณิตศาสตร์ประกอบด้วยการดำเนินการทางคณิตศาสตร์ทั่วไปซึ่งครอบคลุมฟังก์ชันตรีโกณมิติเอกซ์โปเนนเชียลและลอการิทึม ให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจว่าโมดูลคณิตศาสตร์ทำงานอย่างไร -
# 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
โมดูลคิว
คิวเป็นโครงสร้างข้อมูลที่ใช้คิว FIFO (เข้าก่อนออกก่อน) อย่างมีประสิทธิภาพ ตัวอย่างต่อไปนี้แสดงวิธีการทำงานของโมดูลคิว -
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