2009-11-08 3 views

Répondre

135

Voici une façon:

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

Quelqu'un pourrait-il l'expliquer (en particulier le "% 06x"? – Dorian

+8

La méthode [% method] (http://ruby-doc.org/core-1.9.3/String.html#method-i-25) on String utilise le "% 06x" signifie: formater un nombre en hexadécimal, 6 caractères (chiffres dans ce cas) large, 0 rembourré –

12

Vous pouvez générer chaque composant indépendamment:

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

Ceci est considérablement plus personnalisable, mais la solution de Jeremy est beaucoup plus concise. – Benson

+0

Pour une longueur d'octet arbitraire (remplacez 3 w/nombre d'octets): '" ".tap {| s | 3.times {s << ("% 02x"% rand (255))}} ' –

+0

mais c'est toujours une façon cool de le faire, bravo pour la lisibilité. –

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

Le module SecureRandom fait partie de la bibliothèque standard de Ruby

require 'securerandom' 

Il est autoloade d dans Rails, mais si vous utilisez Rails 3.0 ou moins, vous devrez utiliser

ActiveSupport::SecureRandom.hex(3) 
+0

Si vous allez utiliser cette option, vous devrez ajouter hex avec "#". Fonctionne bien, n'oubliez pas le symbole de hachage au début. –

Questions connexes