2010-06-27 3 views
0

я сделать дамп значение RUBY_VERSION => 1.8.7рубинового, как 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', поэтому мы смотрим на новый массив. Кроме того, я тоже пытался «перетасовать!». Если бы я смотрел на старый массив, включение «srand» не помогло бы, верно? –

+0

, кстати, http://ruby-doc.org/core/ на самом деле 1,8,6, поэтому нет тасования –