How can I match the result of g with f’s ?
If I do it like this, it fails because function calls are not allowed in pattern matching.
case g.() do
f.() -> 1
4 -> 2,
5 -> 3,
_ -> 6
end
Note:
This is dummy version of what I need to do in my project. Basically I need to pattern match the result of a function with the result of other functions. But don’t know how to go about it.
Given that you can just assign the result of a function call to a variable and match on that it’s always seemed surprising to me that the compiler doesn’t do this for you. Is there a technical reason for this not being supported or is it something that might happen at some point?
Matches are run in linear time, they can’t allow for arbitrary function calling or anything of the sort as they get compiled to a fairly efficient jumplist (sometimes).
a = fast_op()
b = long_running_thing()
case c do
^a -> 1
^b -> 2
end
Is very explicit that no matching would happen before both calls have returned, whereas the “sugared” version you suggest might hide this fact and a naive reader would assume that long_running_thing() never gets called when cmatches the result of fast_op().