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"