Elixir - โครงสร้าง
โครงสร้างคือส่วนขยายที่สร้างขึ้นบนแผนที่ที่ให้การตรวจสอบเวลาคอมไพล์และค่าเริ่มต้น
การกำหนดโครงสร้าง
ในการกำหนดโครงสร้างจะใช้โครงสร้างป้องกัน -
defmodule User do
defstruct name: "John", age: 27
end
รายการคีย์เวิร์ดที่ใช้กับ Defstruct จะกำหนดฟิลด์ที่โครงสร้างจะมีพร้อมกับค่าดีฟอลต์ Structs ใช้ชื่อของโมดูลที่กำหนดไว้ในตัวอย่างที่ให้ไว้ข้างต้นเราได้กำหนดโครงสร้างชื่อ User ตอนนี้เราสามารถสร้างโครงสร้างผู้ใช้โดยใช้ไวยากรณ์ที่คล้ายกับที่ใช้ในการสร้างแผนที่ -
new_john = %User{})
ayush = %User{name: "Ayush", age: 20}
megan = %User{name: "Megan"})
โค้ดด้านบนจะสร้างโครงสร้างที่แตกต่างกันสามแบบด้วยค่า -
%User{age: 27, name: "John"}
%User{age: 20, name: "Ayush"}
%User{age: 27, name: "Megan"}
โครงสร้างให้การรับประกันเวลาคอมไพล์ว่าเฉพาะฟิลด์ (และทั้งหมด) ที่กำหนดผ่าน defstruct เท่านั้นที่จะได้รับอนุญาตให้มีอยู่ในโครงสร้าง ดังนั้นคุณจึงไม่สามารถกำหนดฟิลด์ของคุณเองได้เมื่อคุณสร้างโครงสร้างในโมดูลแล้ว
การเข้าถึงและอัปเดตโครงสร้าง
เมื่อเราพูดถึงแผนที่เราได้แสดงให้เห็นว่าเราสามารถเข้าถึงและอัปเดตฟิลด์ของแผนที่ได้อย่างไร เทคนิคเดียวกัน (และไวยากรณ์เดียวกัน) นำไปใช้กับโครงสร้างเช่นกัน ตัวอย่างเช่นหากเราต้องการอัปเดตผู้ใช้ที่เราสร้างไว้ในตัวอย่างก่อนหน้านี้ -
defmodule User do
defstruct name: "John", age: 27
end
john = %User{}
#john right now is: %User{age: 27, name: "John"}
#To access name and age of John,
IO.puts(john.name)
IO.puts(john.age)
เมื่อรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังนี้ -
John
27
ในการอัปเดตค่าในโครงสร้างเราจะใช้ขั้นตอนเดียวกับที่เราใช้ในบทแผนที่อีกครั้ง
meg = %{john | name: "Meg"}
โครงสร้างยังสามารถใช้ในการจับคู่รูปแบบทั้งสำหรับการจับคู่กับค่าของคีย์เฉพาะและเพื่อให้แน่ใจว่าค่าที่ตรงกันเป็นโครงสร้างประเภทเดียวกับค่าที่ตรงกัน