Now we can put Proc objects in a when clause as this code.
require 'prime'
def test(n)
print "#{n} is "
case n
when :zero?.to_proc
puts 'zero'
when :even?.to_proc
puts 'an even number'
when :prime?.to_proc
puts 'a prime number'
else
puts 'a non-prime odd number'
end
end
(1..10).each &method(:test)
I would like to write it as below:
require 'prime'
def test(n)
print "#{n} is "
case n
when &:zero?
puts 'zero'
when &:even?
puts 'an even number'
when &:prime?
puts 'a prime number'
else
puts 'a non-prime odd number'
end
end
(1..10).each &method(:test)
The original idea includes dispatch based on type (Symbol), which is not a good idea in general.
The one proposed by ko1 is slightly better, yet I still don't love it.
->&Proc.new{|y|y.zero?}#=> Should be equivalent to ->{|x| x.zero?}->&:zero?#=> Should be equivalent to ->{|x| x.zero?} (Symbol#to_proc applies implicitly)