2009-11-08 10 views

Odpowiedz

135

Oto jeden ze sposobów:

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

Czy ktoś mógłby to wyjaśnić (szczególnie "% 06x"? – Dorian

+8

Metoda [% method] (http://ruby-doc.org/core-1.9.3/String.html#method-i-25) w String używa string jako specyfikacja formatu dla argumentu. "% 06x" oznacza: sformatuj liczbę jako szesnastkową, 6 znaków (w tym przypadku cyfry) szeroką, 0 wypełnioną. –

12

Można wygenerować każdy komponent niezależnie:

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

Jest to znacznie bardziej konfigurowalny, ale rozwiązanie Jeremy'ego jest o wiele bardziej zwięzłe. – Benson

+0

Dla dowolnej długości bajtu (zastąp 3 w/liczbę bajtów): '" ".tap {| s | 3.times {s << ("% 02x"% rand (255))}} ' –

+0

ale nadal jest to świetny sposób na zrobienie tego, aprobaty dla czytelności. –

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

Moduł SecureRandom jest częścią biblioteki standardowej Rubiego

require 'securerandom' 

To autoloade d w Rails, ale jeśli używasz Rails 3.0 lub niższy, musisz użyć

ActiveSupport::SecureRandom.hex(3) 
+0

Jeśli zamierzasz użyć tej opcji, będziesz musiał hex z "#". Działa wspaniale, po prostu nie zapominaj o symbolu skrótu na początku. –