【ELIXIR】struct的應用

什麼是struct?

struct是一種用戶自定義的映射,其中包含了默認的項目。函數

如何定義struct?

┃ defmodule User do
┃   defstruct name: nil, age: nil
┃ end

能夠在struct定義中執行語句嗎?

能夠,它們會在編譯時被執行ui

┃ defmodule User do
┃   defstruct name: nil, age: 10 + 11
┃ end

如何快捷建立struct?

能夠講field name以原子列表的形式表示code

┃ defmodule Post do
┃   defstruct [:title, :content, :author]
┃ end

如何爲struct實現協議?

使用@derive 屬性get

┃ defmodule User do
┃   @derive [MyProtocol]
┃   defstruct name: nil, age: 10 + 11
┃ end
┃ 
┃ MyProtocol.call(john) #=> works

如何讓某個key成爲必填的?

使用@enforce_keys 屬性it

┃ defmodule User do
┃   @enforce_keys [:name]
┃   defstruct name: nil, age: 10 + 11
┃ end
┃ %User{age: 21}
┃ ** (ArgumentError) the following keys must also be given when building struct User: [:name]

注意,這隻在編譯時管用。不能用於validation。io

@type屬性有什麼用

容許在爲函數編寫@spec時以User.t 的形式表示該結構體編譯

┃ defmodule User do
┃   defstruct name: "John", age: 25
┃   @type t :: %User{name: String.t, age: non_neg_integer}
┃ end
相關文章
相關標籤/搜索