在第三方项目中,在模型中我遇到过这样的函数:
def changeset(model \\ %__MODULE__{}, params) do
model
|> cast(params, @required_fields ++ @optional_fields)
|> validate_required(@required_fields)
end
函数怎么可能有一个默认参数,即 both a) 首先,b) 后跟一个强制参数?
有趣的是,这些功能都可以正常工作。
elixir 中的默认参数只是语法糖,编译后 Elixir 会为你生成这些函数:
changeset(params)
changeset(model, params)
这与其他语言中的工作方式不同,我不鼓励滥用它,因为它往往会使代码不可读,特别是如果您有多个默认参数。