callables/proc_case_compare.rb

tests/_examples/callables/proc_case_compare.rb in the metorex repository.

# Proc#=== calls the proc with the given argument, so a callable can stand in
# for a pattern in a case/when.
positive = proc { |number| number > 0 }
p positive.===(5)
p positive.===(-5)

pair = proc { |first, second| [first, second] }
p pair.===([1, 2])

strict = lambda { |first, second| [first, second] }
p strict.===(1, 2)

begin
  strict.===(1)
rescue ArgumentError => trouble
  p trouble.message
end

def describe(value)
  even = proc { |number| number.even? }
  small = lambda { |number| number < 10 }
  case value
  when even then "even"
  when small then "small and odd"
  else "large and odd"
  end
end

p describe(4)
p describe(7)
p describe(11)

Output:

true
false
[1, 2]
[1, 2]
"wrong number of arguments (given 1, expected 2)"
"even"
"small and odd"
"large and odd"