In a third-party project, in the models, I’ve encountered functions like this:

  def changeset(model \\ %__MODULE__{}, params) do
    model
    |> cast(params, @required_fields ++ @optional_fields)
    |> validate_required(@required_fields)
  end

How can a function have a default argument which is both a) first and b) followed by a mandatory one?

What’s interesting, they work properly.

  • @[email protected]
    link
    fedilink
    18 months ago

    That’s interesting. What if you were to call it with only 1 argument? Would that not match, or would it match as the 1st argument is using the default?