callables/method_composition_parens.rb
tests/_examples/callables/method_composition_parens.rb in the metorex repository.
# A Method composes with any callable: `>>` runs the method first and is
# strict about its arguments, `<<` runs the argument first and follows its
# strictness.
class Arithmetic
def double(number)
number + number
end
def square(number)
number * number
end
def multiply(left, right)
left * right
end
end
double = Arithmetic.new.method(:double)
square = Arithmetic.new.method(:square)
increment = proc { |number| number + 1 }
p((double >> square).call(3))
p((double << square).call(3))
p((double >> increment).lambda?)
p((double << increment).lambda?)
p((double >> increment).is_a?(Proc))
multiply = Arithmetic.new.method(:multiply)
p((multiply >> increment).call(2, 3))
callable = Object.new
def callable.call(number)
number - 1
end
p((double >> callable).call(5))
begin
double >> Object.new
rescue TypeError => problem
puts(problem.message)
end
Output:
36
18
true
false
true
7
9
callable object is expected