2011-03-27 9 views
6

Débil como en las referencias débiles. Básicamente, necesito una secuencia de números donde algunos de ellos pueden ser asignados cuando ya no los necesitan.¿Hay una estructura de datos como transmisión, pero débil?

+4

Usted debe estar contento de que no tiene una corriente débil (lo siento, no pudo resistir) –

+0

http://stackoverflow.com/questions/4132924/functional-processing- of-scala-streams-without-outofmemory-errors –

+0

@Sciss Disculpa, no pude encontrar nada cuando busqué ... bueno, eso pasa a veces, ¿verdad? – Anonymous

Respuesta

5

scalaz.EphemeralStream es lo que quieres.

0

Las vistas le proporcionan una colección perezosa, donde cada valor se calcula según sea necesario.

+0

Para propósitos de aprendizaje, ¿esta respuesta fue incorrecta? – Bradford

+0

Sí. Ya tengo una colección floja (Stream), pero también necesito que sea débil. – Anonymous

+0

Todo el punto de la pregunta ... ¡gotcha! Gracias. Dejaré mi respuesta aquí para que otros vean estos comentarios. ¿Puede alguien explicar por qué las opiniones no son débiles? – Bradford

0

Una cosa que podría hacer es crear un Iterable en lugar de un Stream. Su Iterable necesita proporcionar un método iterator, que devuelve un iterador con los métodos hasNext y next.

Cuando se recorre la Iterable, hasNext y next serán llamados a generar los elementos a medida que se necesitan, pero no se almacenan en cualquier lugar (como un Stream hace).

ejemplo simple:

class Numbers extends Iterable[Int] { 
    def iterator = new Iterator[Int] { 
    private var num = -1 

    def hasNext = num < 99 
    def next = { num += 1; num } 
    } 
} 
+0

Eso no ayudaría mucho, porque necesito un flujo por dos razones: programación funcional (= no iteradores) y memorización (no son iterables). – Anonymous

+0

@Anonymous - tenga en cuenta que 'Iterable' tiene la mayoría de los métodos de recolección de Scala (incluidos' foreach', 'map',' filter', 'foldLeft' etc.) para que pueda usarlo para la programación de func como cualquier otra colección y memoialización: Pensé que querías algo que * no * retenga los valores generados? – Jesper

+0

Debería retenerlos, solo que no es permanente. Mira (creo) java.lang.ref.WeakReference. – Anonymous

Cuestiones relacionadas