Ruby - 逐步将块的输出分配给未声明的变量

时间:2015-06-10 02:14:30

标签: ruby

我对Ruby很陌生,最近几次我需要做以下事情:

1)声明变量 2)对变量 3执行操作 返回变量

当我觉得我应该能够

1)在将其逐渐分配给变量然后返回时执行操作

为了说明我的意思,下面的示例生成一个随机的十六进制颜色。 我觉得这应该是一个班轮,但我不确定如何。

# This example generates a random color 
color = "#"
6.times { color << "ABCDEF0123456789".chars.sample }
color #= "#ABC123"


# The above code seems cumbersome & what I want to do this
"#" << 6.times { color << "ABCDEF0123456789".chars.sample } #= "#\u0006"

我尝试了很多变化而没有成功。有没有办法可以做到这一点?时间循环是错误的方法吗?

2 个答案:

答案 0 :(得分:4)

你要问的方法就是:

"#" + 6.times.map { "ABCDEF0123456789".chars.sample }.join

但是这样做可能更正确,更容易:

format "#%02x%02x%02x", rand(255), rand(255), rand(255)

或者:

require 'securerandom'
"#" + SecureRandom.hex(3)

答案 1 :(得分:0)

你也可以写:

"##{ 'Magpie'.gsub(/./) { |c| rand(16).to_s(16) } }"
  #=> "#b1a501" 

如果由于某种原因你需要.upcase,请点击"#B1A501"