Alle Thursday 05 February 2009, Stefano C. ha scritto:
ruby -e ‘a = [1, 2, 3, 4]; p 10.times.map{a.choice}.join’
always give the same result, while
Sorry, hit the “Send” button too soon. Here’s the full version
I’ve just stumbled upon a strange behaviour of Array#choice (using ruby
1.8.7- p72). As far I understand, an_array.choice should be (almost) the
same as an_array[rand(an_array.size)]. Thus, the two following pieces of
code should be equivalent
a = [1, 2, 3, 4]
p 10.times.map{a.choice}.join
p 10.times.map{a[rand(a.size)]}.join
However, this doesn’t seem to be the case. In particular, something
like:
ruby -e ‘a = [1, 2, 3, 4]; p 10.times.map{a.choice}.join’
always give the same result, while
ruby -e ‘a = [1, 2, 3, 4]; p 10.times.map{a[rand(a.size)]}.join’
gives a different result every time the command is executed (which, in
my
opinion, is the correct behaviour).
It seems that to get the correct behaviour from choice, you need to call
srand
before using it. Does anyone know why this is necessary with choice but
not
with rand? Is it the intended behaviour or a bug?
Thanks
Stefano