Iako nijedno računalo ne može generirati doista slučajne brojeve, Ruby pruža pristup metodi koja će se vratiti pseudoslučajnih brojevi.
Nijedno računalo ne može stvoriti istinski slučajni brojevi čisto računanjem. Najbolje što mogu je generirati pseudoslučajnih brojevi, koji su niz brojeva koji pojaviti slučajni, ali nisu.
Za ljudskog promatrača, ove su brojke doista slučajne. Neće biti kratkih ponavljajućih sekvenci, a oni će, barem ljudskom promatraču, pokazati jasan uzorak. Međutim, s obzirom na dovoljno vremena i motivacije, original sjeme može se otkriti, ponovno uspostavljeni redoslijed i pretpostavljeni sljedeći broj.
Iz tog razloga se metode raspravljene u ovom članku vjerojatno ne bi trebale koristiti za generiranje brojeva koji moraju biti kriptografski sigurni.
Generatori pseudo slučajnih brojeva moraju biti zasijana kako bi se stvorili nizovi koji se razlikuju svaki put kada se generira novi slučajni broj. Nijedna metoda nije čarobna - ovi naizgled slučajni brojevi generiraju se pomoću relativno jednostavnih algoritama i relativno jednostavne aritmetike. Sjetvom PRNG-a svaki put ga pokrećete u različitoj točki. Ako je ne posadite, svaki bi put generirao isti slijed brojeva.
U Ruby, the Kernel # srand metoda se može nazvati bez argumenata. Odabrat će slučajno sjeme broja na temelju vremena, ID-a procesa i broja redoslijeda. Jednostavno pozivom srand bilo gdje na početku vašeg programa, on će generirati različite serije naizgled nasumičnih brojeva svaki put kada ga pokrenete. Ta se metoda podrazumijeva nakon što se program pokrene i sadi PRNG s vremenom i ID-om procesa (bez rednog broja).
Jednom kada se program pokrene i Kernel # srand ili su se ili implicitno ili eksplicitno zvali, Kernel # rand metoda se može nazvati. Ova metoda, pozvana bez argumenata, vratit će slučajni broj od 0 do 1. U prošlosti je taj broj obično bio skaliran do maksimalnog broja koji želite generirati, a možda i to_i pozvao ga je da ga pretvori u cijeli broj.
No, Ruby nešto olakšava ako koristite Ruby 1.9.x. Kernel # rand metoda može uzeti jedan argument. Ako je ovaj argument a numerički bilo koje vrste, Ruby će generirati cijeli broj od 0 do (ali ne uključujući) taj broj.
Međutim, što ako želite generirati broj od 10 do 15? Obično biste generirali broj od 0 do 5 i dodali ga 10. Međutim, Ruby to olakšava.
Obavezno obratite pozornost na dvije vrste raspona. Ako ste nazvali rand (10..15), to bi stvorilo broj od 10 do 15 uključujući 15. Dok rand (10... 15) (s 3 točke) generira broj od 10 do 15 ne uključuje 15.
Ponekad vam je potreban slučajni slijed brojeva, ali morate svaki put generirati isti niz. Na primjer, ako generirate slučajne brojeve u jedinici testa, trebali biste generirati isti slijed brojeva svaki put.
Jedinstveni test koji ne uspije u jednom slijedu, trebao bi ponovno propasti sljedeći put kad se pokrene, ako je sljedeći put generirao razliku u nizu, možda neće uspjeti. Da biste to učinili, nazovite Kernel # srand s poznatom i konstantnom vrijednošću.
Provedba Kernel # rand je prilično ne-Ruby. Ne apstraktuje PRNG ni na koji način, niti vam omogućava da inicirate PRNG. Postoji jedna globalna država za PRNG koju dijeli sav kôd. Ako promijenite sjeme ili na neki drugi način promijenite stanje PRNG-a, može imati širi raspon djelovanja nego što ste predviđali.
No, budući da programi očekuju da rezultat ove metode bude nasumičan - to je njegova svrha! - to vjerojatno nikad neće biti problem. Samo ako program očekuje da vidi očekivani slijed brojeva, kao na primjer da je nazvao srand s konstantnom vrijednošću, treba li vidjeti neočekivane rezultate.