Имена методов для четырех унарных операторов +
, -
, ~
и !
: +@
, -@
, ~@
и !@
. Итак, забавно выглядящие определения метода:
def +@; _show _test :_pass, :_fail end
def -@; _show _test :_fail, :_pass end
def ~@; _show _pend; end
def !@; _show _desc; end
просто определите перегрузки для этих четырех унарных операторов. Затем TestRocket подключается к классу Proc с помощью Proc.send :include, TestRocket
.
Это:
-> { Die.new(2) }
- это просто лямбда-определение и другой способ записи lambda { Die.new(2) }
. Затем, когда TestRocket подключен к Proc, мы можем сказать следующее:
+-> { Die.new(2) }
# + lambda { Die.new(2) }
и он запустит этот метод:
def +@; _show _test :_pass, :_fail end
как метод экземпляра этой лямбды.
Выглядит как злоупотребление перегрузкой унарного оператора, чтобы "изобрести" нечто, похожее на новые -->
, ~->
, ... операторы.