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"}

โครงสร้างยังสามารถใช้ในการจับคู่รูปแบบทั้งสำหรับการจับคู่กับค่าของคีย์เฉพาะและเพื่อให้แน่ใจว่าค่าที่ตรงกันเป็นโครงสร้างประเภทเดียวกับค่าที่ตรงกัน