2010-10-05 18 views
11

Quiero que una línea sea verdadera/falsa, que prueba cada elemento de una matriz para determinar si es un Entero o no. Entonces, si algún elemento en la matriz no es un Entero, debería devolver falso, de lo contrario es verdadero. Aquí está mi intento:Ruby: prueba cada elemento de la matriz, obtienes un resultado

>> ([2,1,4].map {|x| (x.is_a? Integer)}).reduce {|x, result| x and result} 
=> true 
>> ([2,"a",4].map {|x| (x.is_a? Integer)}).reduce {|x, result| x and result} 
=> false 

¿Alguna otra idea para destilarlo aún más?

Respuesta

19
array.all?{ |x| x.is_a? Integer } 
+0

perfecto, muchas gracias. – oaklodge

+0

¡Siéntete mágico! – mko

5
ary.all?(&Integer.method(:===)) 
+0

Realmente deseo que Ruby tenga una mejor sintaxis para acceder a los métodos. Esto es más puramente conceptual, pero en realidad es más largo que escribir el bloque explícito. – Chuck

+3

@Chuck: Sí. Hay una idea flotando alrededor que aparece cada dos años para distinguir mejor entre los operadores '.' (envío de mensajes) y' :: '(resolución de alcance). Actualmente, '.' significa envío de mensaje y' :: 'significa lanzamiento de mensaje o envío de mensaje. Si eliminamos la parte "o mensaje que envía" de '::', podemos extenderla para permitir que cosas como 'foo :: bar' signifiquen' foo.method (: bar) '. Actualmente, eso no funciona, ya que 'foo :: bar' significa lo mismo que' foo.bar'. –

+0

Me gusta este punto estilo libre .. :) –

Cuestiones relacionadas