Poucas pessoas sabem que Proc#===
na verdade é um apelido para Proc#call
. Isso permite que Proc
a seja usado como predicado para when
e, portanto, permite misturar classtyping e ducktyping:
case( variable )
when Hash then "Real Hash"
when proc{|x| x.respond_to? :[] } then "Responds to :[]"
end
Isso fica ainda mais legal com a nova sintaxe de foguete:
case( variable )
when Hash then "Real Hash"
when ->x{ x.respond_to? :[] } then "Responds to :[]"
end
Agradável!