It turns out you can! It takes a little bit of combinator and anonymous class hackery but it does the job:
class HopelesslyEgocentric def method_missing what, *args; self; end; end def if2 cond1, cond2 if cond1 and cond2 yield HopelesslyEgocentric.new elsif cond1 Class.new(HopelesslyEgocentric) do def else1; yield; HopelesslyEgocentric.new; end end.new elsif cond2 Class.new(HopelesslyEgocentric) do def else2; yield; HopelesslyEgocentric.new; end end.new else Class.new(HopelesslyEgocentric) do def neither; yield; end end.new end endThen you can go ahead and use it like this:
if2(5 < x, x < 7) do puts "both true" end.else1 do puts "first is true" end.else2 do puts "second is true" end.neither do puts "neither is true" endI thought that was pretty nifty. I doubt performance is amazing, but it is fairly easy to use!