2012-10-04 12 views
35

Sembra che potrebbe essere keep_if.Qual è il contrario di Array # reject in ruby?

Se sì, perché non si chiama keep?

+3

Guardando http://www.ruby-doc.org/core-1.9.3/Array.html, sembra abbastanza chiaro che 'keep_if' è effettivamente l'opposto (stessa logica ma ribalta il confronto da' true' a 'falso'). Questa è una domanda sul nome del metodo? – bdares

+0

@bdares 'keep_if' non ha la stessa logica di' reject'. Potrebbe avere la stessa logica di 'reject!', Però. –

risposta

75
  • L'opposto reject è select (restituendo un nuovo array)
  • L'opposto reject! è select! (modificando l'array in posizione)
  • L'opposto keep_if è delete_if (modificando l'array in posizione)
2

Penso che abbia a che fare con una semantica ben ponderata, e direi che è corretto. Diciamo che hai già un insieme di cose, "t1, t2 e t3"; se rifiuti un sottoinsieme, dici "Rifiuta t1 e t2". Non parli di T3, perché non è influenzato dalla tua azione (il tuo rifiuto): il default è "keep". Ma se stai esprimendo ciò che intendi mantenere e dici solo "tengo t1 e t2", lo stato di t3 viene messo in dubbio: dopo tutto, hai già t1 e t2, quindi qual è il punto di dirti? tenendoli (sono già nello stato di default, "mantieni"), specialmente visto che stai mantenendo implicitamente anche il T3. Usando la sintassi "keep_if", stai indicando esplicitamente che esiste una condizione (semplice o composta) che determinerà ciò che deve essere conservato e ciò che deve essere scartato.

Problemi correlati