2009-11-08 5 views

ответ

135

Вот один из способов:

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

Может ли кто-нибудь объяснить это (особенно «% 06x»? – Dorian

+8

В [% method] (http://ruby-doc.org/core-1.9.3/String.html#method-i-25) на String используется string в качестве спецификации формата для аргумента. «% 06x» означает: форматируйте число в виде шестнадцатеричного, 6 символов (цифры в этом случае) в ширину, 0 дополняется. –

12

Вы можете создавать каждый компонент самостоятельно:

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

Это значительно более настраиваемый, но решение Джереми гораздо более кратким. – Benson

+0

Для произвольной длины байта (замените 3 w/количество байтов): '" ".tap {| s | 3.times {s << ("% 02x"% rand (255))}} ' –

+0

, но это все еще классный способ сделать это, превью для удобочитаемости. –

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

Модуль SecureRandom является частью стандартной библиотеки Руби

require 'securerandom' 

Это autoloade d в Rails, но если вы используете Rails 3.0 или ниже, вы должны будете использовать

ActiveSupport::SecureRandom.hex(3) 
+0

Если вы собираетесь использовать этот параметр, вам нужно будет добавить hex с "#". Отлично работает, просто не забывайте символ хеша в начале. –

Смежные вопросы