This is what the docs have to say:
Es permitir que un objeto proc para ser un blanco de when
cláusula en la declaración caso.
Ésta es una, tal vez artificial, ejemplo:
even = proc { |x| x % 2 == 0 }
n = 3
case n
when even
puts "even!"
else
puts "odd!"
end
Funciona porque la case/when
es básicamente ejecutados de esta manera:
if even === n
puts "even!"
else
puts "odd!"
end
Los case/when
cheques que se ramifican para ejecutar llamando ===
en los argumentos a when
cláusulas, recogiendo el primero que devuelve un valor Truthy.
A pesar de su similitud con el operador de igualdad (==
) que no es una forma más fuerte o más débil de la misma. Intento pensar en el operador ===
como el operador "pertenece a". Class
lo define para que pueda verificar si un objeto pertenece a la clase (es decir, es una instancia de la clase o una subclase de la clase), Range
lo define como para verificar si el argumento pertenece a rango (es decir está incluido en el rango), y así sucesivamente. Esto realmente no hace que el caso Proc
tenga más sentido, pero piense en ello como una herramienta para hacer que su propio pertenezca a operadores de, como mi ejemplo anterior; He definido un objeto que puede determinar si algo pertenece a el conjunto de los números pares.
Oh los extremos a los que rubí vale con tal de tener buen caso/Cuando los bloques :-) 'String ===" foo "=> true' –