2009-11-08 110 views

回答

135

这里有一种方法:

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

有人可以解释它(特别是“%06x”?) – Dorian 2012-01-17 05:12:32

+8

String上的[%method](http://ruby-doc.org/core-1.9.3/String.html#method-i-25)使用字符串作为参数的格式规范。“%06x”表示:将数字格式化为十六进制,6个字符(本例中为数字)宽,0填充 – 2012-03-03 16:37:28

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

这是可定制的,但Jeremy的解决方案要简洁得多。 – Benson 2010-03-09 07:43:05

+0

对于任意字节长度(替换3 w /字节数):'“”.tap {| s | 3.times {s <<(“%02x”%rand(255))}}' – 2012-03-28 19:40:00

+0

但这仍然是一个很酷的方式来做到这一点,大拇指为可读性。 – 2014-03-04 06:50:07

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

SecureRandom模块是Ruby的标准库的一部分

require 'securerandom' 

这是autoloade d,但如果你使用的是Rails 3.0或更低版本,则需要使用

ActiveSupport::SecureRandom.hex(3) 
+0

如果要使用此选项,则需要在十六进制的“#”。很好用,只是不要忘记开头的散列符号。 – 2018-01-25 07:25:37