Due to the limitations of Ruby metaprogramming (unlike e.g. Elixir macros), we have to use lambdas for the "then" cases unless we want to evaluate them even if that branch doesn't match.
And in example 3, we also need it for the "if" cases, unless we're OK with evaluating conditions prematurely.