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
?
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
?
reject
select
ist (ein neues Array zurückkehrt)reject!
ist select!
(Editieren der Array in place)keep_if
ist delete_if
(Editieren des Array in place)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.
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
@bdares 'keep_if' hat nicht die selbe Logik wie' reject'. Es kann jedoch die gleiche Logik wie "ablehnen!" Haben. –