2009-11-08 20 views

Respuesta

135

Aquí está una manera:

colour = "%06x" % (rand * 0xffffff) 
+0

¿Podría alguien explicarlo (especialmente el "% 06x"? – Dorian

+8

El [método%] (http://ruby-doc.org/core-1.9.3/String.html#method-i-25) en String utiliza el cadena como una especificación de formato para el argumento. "% 06x" significa: formatear un número como hexadecimal, 6 caracteres (dígitos en este caso) de ancho, 0 acolchado. –

12

Puede generar cada componente de forma independiente:

r = rand(255).to_s(16) 
g = rand(255).to_s(16) 
b = rand(255).to_s(16) 

r, g, b = [r, g, b].map { |s| if s.size == 1 then '0' + s else s end } 

color = r + g + b  # => e.g. "09f5ab" 
+1

Esto es considerablemente más personalizable, pero la solución de Jeremy es mucho más concisa. – Benson

+0

Para longitud de bytes arbitraria (reemplace 3 w/número de bytes): '" ".tap {| s | 3.times {s << ("% 02x"% rand (255))}} ' –

+0

pero esta sigue siendo una buena manera de hacerlo, pulgares arriba para facilitar la lectura. –

21
SecureRandom.hex(3) 
#=> "fef912" 

El módulo SecureRandom es parte de la biblioteca estándar de Ruby

require 'securerandom' 

Es autoloade d en los carriles, pero si usted está usando Rails 3.0 o inferior, tendrá que utilizar

ActiveSupport::SecureRandom.hex(3) 
+0

Si va a utilizar esta opción, deberá anteponer el hexagonal con "#". Funciona muy bien, solo que no olvides el símbolo hash al principio. –

Cuestiones relacionadas