簡體   English   中英

`~w(username full_name password)a` 是什么意思?

[英]what's meaning of `~w(username full_name password)a`?

hexpm項目中,行cast(%User{}, params, ~w(username full_name password)a) 我知道它可能等於 [:username, :full_name,:password],但為什么呢? ~wa什么意思?

  def build(params, confirmed? \\ not Application.get_env(:hexpm, :user_confirm)) do
    cast(%User{}, params, ~w(username full_name password)a)
    |> validate_required(~w(username password)a)
    |> cast_assoc(:emails, required: true, with: &Email.changeset(&1, :first, &2, confirmed?))
    |> cast_embed(:tfa)
    |> update_change(:username, &String.downcase/1)
    |> validate_length(:username, min: 3)
    |> validate_format(:username, @username_regex)
    |> validate_format(:username, @username_reject_regex)
    |> validate_exclusion(:username, @reserved_names)
    |> unique_constraint(:username, name: "users_username_idx")
    |> validate_length(:password, min: 7)
    |> validate_confirmation(:password, message: "does not match password")
    |> update_change(:password, &Auth.gen_password/1)
  end

請參閱~w的文檔。

~w(username full_name password)a只是寫[:username, :full_name, :password]的簡寫。 它可能受到 Perl 的Quote-Like Operators的啟發。

  • ~w符號告訴 elixir 空格分隔的項目應該是一個列表。
  • a修飾符告訴它項目是原子。

考慮到代碼的閱讀頻率遠高於編寫頻率,我個人不使用此標志。 直接寫[:username, :full_name, :password]不需要太多努力,並且避免了從未見過印記的新手和不記得修飾符的老手提出的此類問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM