将Ruby作为index.cgi运行,[1,3,5] .shuffle总是产生相同的结果

时间:2010-06-27 10:47:25

标签: ruby erb shuffle srand

我转储了RUBY_VERSION =>的值1.8.7

每次,[1,3,5] .shuffle的值也是[1,3,5] 我必须在它前面添加一个srand(Time.now.to_i)或srand()以使其随机... 我以为srand会被自动调用?但也许不是在.cgi环境中?

如果我使用irb,并查看[1,3,5] .shuffle,并在每次结果不同时退出并重新输入irb。

顺便说一下,ri shuffle没有给出任何东西,而且Array和Enumerable文档没有列出随机播放或随机播放!要么......?

1 个答案:

答案 0 :(得分:0)

由于我无法查看你是如何检查它是否已经改变,我不能肯定地说,但我希望问题必须处理你是如何检查它是否已经改变。如果使用shuffle,则不会改变原始数组。因此,如果检查原始数组的值而不是返回的结果,则每次返回的方法都会返回相同的值

RUBY_VERSION    # => "1.8.7"

a = [1,3,5]

# a does not change, because shuffle does not mutate
a.shuffle       # => [5, 1, 3]
a               # => [1, 3, 5]

# now a does change, because shuffle! does mutate
a.shuffle!  # => [5, 3, 1]
a           # => [5, 3, 1]

此外,还有文档http://ruby-doc.org/core-1.8.7/classes/Array.html#M000335