2012-10-04 13 views
35

Es scheint, dass es keep_if sein könnte.Was ist das Gegenteil von Array # in Ruby ablehnen?

Wenn ja, warum heißt es nicht keep?

+3

Betrachtet man http://www.ruby-doc.org/core-1.9.3/Array.html, so scheint es ziemlich klar zu sein, dass 'keep_if' tatsächlich das Gegenteil ist (dieselbe Logik, aber den Vergleich von' true') zu "falsch"). Ist das eine Frage zum Methodennamen? – bdares

+0

@bdares 'keep_if' hat nicht die selbe Logik wie' reject'. Es kann jedoch die gleiche Logik wie "ablehnen!" Haben. –

Antwort

75
  • Das Gegenteil von rejectselect ist (ein neues Array zurückkehrt)
  • Das Gegenteil von reject! ist select! (Editieren der Array in place)
  • Das Gegenteil von keep_if ist delete_if (Editieren des Array in place)
2

Ich denke, es hat mit gut durchdachte Semantik zu tun, und ich würde argumentieren, dass es korrekt ist. Nehmen wir an, Sie haben bereits eine Reihe von Dingen, "t1, t2 und t3"; Wenn Sie eine Teilmenge ablehnen, sagen Sie "Ich lehne t1 und t2 ab". Sie erwähnen t3 nicht, weil es nicht von Ihrer Aktion betroffen ist (Ihre Ablehnung): Die Standardeinstellung ist "Behalten". Aber wenn Sie ausdrücken, was Sie behalten wollen, und Sie sagen einfach "Ich halte t1 und t2", wird der Status von t3 in Frage gestellt: Sie haben ja schon t1 und t2, also was ist der Sinn, Sie zu sagen? re halten sie (sie sind bereits im Standardzustand, "keep"), zumal Sie implizit auch t3 behalten. Mit der Syntax "keep_if" geben Sie explizit an, dass eine Bedingung (einfach oder zusammen) vorliegt, die bestimmt, was zu behalten ist und was verworfen werden soll.

Verwandte Themen