2011-03-11 21 views
8
> a = %w(a b c) 
=> ["a", "b", "c"] 
> a.select!{|e| !e.nil?} 
NoMethodError: undefined method `select!' for ["a", "b", "c"]:Array 
    from (irb):2 

ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-darwin10.5.0], MBARI 0x6770, Ruby Enterprise Edition 2010.02 

El documento dice que hay un método llamado seleccionar! en conjunto.¿Ruby tiene seleccionado el método de matriz? ¿o no?

http://www.ruby-doc.org/core/classes/Array.html#M000252

+0

como a continuación no está en 1.8.7, pero podría usar delete_if/reject! con lógica inversa (o incluso implementar seleccione usted mismo al volver a abrir la clase de matriz) – nruth

+0

Por cierto, hay una nueva versión de REE out, 2011.03, que incluye varios errores importantes y soluciones de seguridad. –

Respuesta

7

Los documentos que están vinculados a para Ruby 1.9.2. Ruby 1.8.7 Arrays no tiene select!.

EDITAR: Como referencia futura, puede ver documentation para las diferentes versiones de Ruby que están disponibles.

+0

No es así. Los documentos para 1.8.7 están aquí: http://ruby-doc.org/core-1.8.7/ –

+0

Gracias. Actualizaré mi respuesta. – theIV

1

El código funciona para mí, pero estoy ejecutando Ruby 1.9.2 (que es la misma versión del documento que ha vinculado).

Aquí está el 1.8.7 documentation. Solo está disponible el aviso select, no select!

9

de Ruby 1.8.7 hace tienen Array#reject!, sin embargo:

>> a = [1, 2, nil] 
=> [1, 2, nil] 
>> a.reject! &:nil? 
=> [1, 2] 
+0

Creo que esta debería ser la respuesta aceptada si la pregunta original de @Nadal es realmente "¿cómo hago para que funcione?". También creo que es importante aclarar las diferentes ubicaciones para obtener documentación para las diversas versiones de Ruby que ahora están "flotando" en su ecosistema. – theIV

2

Array#select! se introdujo en Ruby 1.9.2.

Para obtenerlo en versiones anteriores de Ruby y dejar de preocuparse por las versiones de Ruby que tienen los métodos, puede require "backports/1.9.2/array/select".

También puede usar Array#reject! o combinar #replace y #select en su lugar.

Cuestiones relacionadas