2010-06-27 17 views
0

我的转储值RUBY_VERSION => 1.8.7运行Ruby作为index.cgi,[1,3,5] .shuffle总是产生相同的结果

每一次,[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文档没有列出洗牌或洗牌!要么...?

回答

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

+0

实际上,在.cgi,我做了'p [1,3,5] .shuffle.inspect',所以我们正在查看新的数组。另外,我也尝试过'shuffle!'。如果我在看旧的阵列,那么输入“srand”就没有帮助,对吧?顺便说一下, – 2010-06-27 11:51:50

+0

,http://ruby-doc.org/core/实际上是1.8.6,这就是为什么没有洗牌 – 2010-06-27 11:54:57

相关问题