2011-12-19 7 views
7

La documentación para Array#sample dice que puede tener un rng:Cómo usar la sintaxis de matriz # muestra (n, aleatorio: rng)?

Si se da RNG, que se utilizará como el generador de números aleatorios.

¿Cómo funciona un rango como un generador de números aleatorios, o por qué es útil?

También la forma de hash sugiere que hay otras opciones, pero no puedo encontrar nada sobre ellas. Probando [1,2,3,4,5].sample(3) se comporta como [1,2,3,4,5].sample(3, random: 1..2).

+0

supongo que se puede utilizar el generador de números aleatorios se puede utilizar como una fuente adicional de números aleatorios (como un dispositivo de hardware) que puede proporcionar una entropía mejor que el RNG incorporado de Ruby. – Koraktor

+0

"Un generador de números aleatorios (RNG) es un dispositivo computacional o físico diseñado para generar una secuencia de números o símbolos que carecen de cualquier patrón, es decir, parecen aleatorios". http://en.wikipedia.org/wiki/Random_number_generation –

+0

Estoy teniendo la misma confusión ... Todavía no estoy entendido, ¿cuál es el propósito del segundo argumento opcional con el método '# sample'. Si estás bien ahora, ¿podrías decirme el caso de uso de este escenario? –

Respuesta

8

El argumento debe ser un generador de números aleatorios (RNG).

Si no se proporciona uno, se aplica de forma predeterminada la implementación Ruby "estándar".

Puede ser reemplazado con un generador de números aleatorios arbitraria, al igual que uno que no lo es en absoluto al azar:

class NotAtAllRandom 
    def self.rand(x=0) 
    0 
    end 
end 

> (1..10000).sample(3, random: NotAtAllRandom) 
=> [1, 2, 3] 
> (1..10000).sample(3, random: NotAtAllRandom) 
=> [1, 2, 3] 
+0

Error de lectura de rango para el rango en lugar de generador de números aleatorios, lo probé, no tenía sentido. Lo aclaró, gracias. – steenslag

+0

@steenslag Supongo que se parece al rango - duh; Ni siquiera vi eso. –

+0

"No tengo claro por qué piensas que es un rango.": ''Range'.tr (' aeiou ',' ') ==' rng''. –

Cuestiones relacionadas