"~w(用户名full_name密码)a"是什么意思?



在hexmm项目中,行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运算符的启发。

  • ~wsigil告诉elixir空间分离的项目应该是一个列表
  • CCD_ 8修改器告诉它这些项是原子

考虑到代码的阅读频率远高于编写频率,我个人不使用此sigil。直接编写[:username, :full_name, :password]不需要太多努力,并且避免了从未见过sigil的新手和不记得修饰符的老手提出的这样的问题。

最新更新