From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier via Users list for the GNU Emacs text editor Newsgroups: gmane.emacs.help Subject: Re: Generic functions: Specializers like `or' or `memq'? Date: Sat, 06 Nov 2021 19:36:14 -0400 Message-ID: References: <87r1bxcg6g.fsf@web.de> <87y265aymg.fsf@posteo.net> <87ilx9hrn6.fsf@web.de> <87a6ilorh0.fsf@ericabrahamsen.net> <878ry0nce8.fsf@web.de> Reply-To: Stefan Monnier Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34593"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:1zxx7RC/VdBBinER187mtqO+Yws= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Sun Nov 07 00:36:48 2021 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mjVEt-0008om-Ey for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 07 Nov 2021 00:36:47 +0100 Original-Received: from localhost ([::1]:39178 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mjVEr-0007AD-Ld for geh-help-gnu-emacs@m.gmane-mx.org; Sat, 06 Nov 2021 19:36:45 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:45700) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mjVEU-0007A5-50 for help-gnu-emacs@gnu.org; Sat, 06 Nov 2021 19:36:22 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:53070) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mjVES-0003tJ-Gr for help-gnu-emacs@gnu.org; Sat, 06 Nov 2021 19:36:21 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1mjVEQ-0008GZ-Nk for help-gnu-emacs@gnu.org; Sun, 07 Nov 2021 00:36:18 +0100 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:134426 Archived-At: >> [ `cl-generic.el` solves this problem by forcing the generalizer to >> come with a priority (a number), which makes the ordering "trivial" >> for `cl-generic.el` but it can be hard to choose the right priority >> to use when defining a new specializer/generalizer. ] > > I don't see this. How would an `or' or `memql' specializer be different > from implementing the method several times for each alternative using > the same body? You need to specify the priority of things like (or (eql 4) integer) and (or (eql 4) (eql 5)) and (or (eql 4) (eql "hello")) The first wants to have lower priority than `integer`, the second should have higher priority than `integer`, as for the third ... well ... It's easier to move the code to a separate function and use individual `cl-defmethod`s for each case, all of them implemented by calling that separate function. Stefan