Unfortunately a run_if that has both success and failure branches offers no
benefit to a "if" - so I would suggest to use that instead.

Furthermore, I wouldn't expect a function called "run_if" to receive (or
return) the first argument if the condition evaluates to false. For
something named run or apply, I would simply expect to return "nil".

That's why I proposed something along the lines of "update_if", because it
should be clear that the intent is to update/modify the first argument
somehow.

On Mon, Jun 8, 2020 at 4:13 PM Marcus <[email protected]> wrote:

> I like the Map.put_if from the first post. I am not sure if
> run_if/update_if is a good idea because it adds to much "magic", and it
> could lead to the writing of unreadable code.
> If we go with run_if, I think we should have a function for each branch
> (true/false). Something like:
>
> @spec run_if(data, cond, do_fun, else_fun \\ &identity/1)
>   when data: term(),
>        cond: boolean() | (term() -> boolean()),
>        do_fun: (term() -> term()),
>        else_fun: (term() -> term())
> def run_if ...
>
> x = nil
> y = 11
> z = nil
>
> map
> |> run_if(x != nil, fn m -> Map.put(m, :x, x) end)
> |> run_if(y != nil, fn m -> Map.put(m, :y, y) end)
> |> run_if(fn m -> Map.has_key(m, :a) end, fn m -> Map.put(m, :b) end)
> |> run_if(
>      z != nil,
>      fn m -> Map.put(m, :z, z) end,
>      fn m -> Map.update(m, :missing, :z, fn x -> [:z|x] end)
>    )
>
> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/f1e65671-48c9-47cb-9d9f-65a695e41e8co%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/f1e65671-48c9-47cb-9d9f-65a695e41e8co%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KsrPLXBYrq%3DzGRK2EAtpGpGBHzGFxNA_WVrcAwrpUw3A%40mail.gmail.com.

Reply via email to