2012-10-04 18 views
35

Parece que podría ser keep_if.¿Qué es lo opuesto a Array # reject in ruby?

Si es así, ¿por qué no se llama keep?

+3

Mirando http://www.ruby-doc.org/core-1.9.3/Array.html, parece bastante claro que 'keep_if' es realmente lo contrario (la misma lógica pero cambia la comparación de' true' a 'falso'). ¿Es esto una pregunta sobre el nombre del método? – bdares

+0

@bdares 'keep_if' no tiene la misma lógica que' reject'. Sin embargo, puede tener la misma lógica que '¡rechazar! '. –

Respuesta

75
  • Lo contrario de reject es select (volviendo una nueva matriz)
  • Lo contrario de reject! es select! (edición de la matriz en su lugar)
  • Lo contrario de keep_if es delete_if (edición de la matriz en su lugar)
2

Creo que tiene que ver con una semántica bien pensada, y yo diría que es correcta. Digamos que ya tienes un conjunto de cosas, "t1, t2 y t3"; si rechaza un subconjunto, diga "Rechazo t1 y t2". No mencionas t3, porque no se ve afectado por tu acción (tu rechazo): el valor predeterminado es "mantener". Pero si expresas lo que piensas conservar y dices "me quedo t1 y t2", el estado de t3 se pone en tela de juicio: después de todo, ya tienes t1 y t2, así que ¿de qué sirve decírtelo? manteniéndolos (ya están en el estado predeterminado, "keep"), especialmente porque también implícitamente mantienes t3. Al usar la sintaxis "keep_if", está indicando explícitamente que hay una condición (simple o compuesta) que determinará qué se debe conservar y qué se va a descartar.