unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#68029: 29.1; (elisp) `pcase Macro': misleading mention of `cl-case'
@ 2023-12-25 16:26 Drew Adams
  2023-12-25 16:53 ` Stefan Kangas
  0 siblings, 1 reply; 3+ messages in thread
From: Drew Adams @ 2023-12-25 16:26 UTC (permalink / raw)
  To: 68029

I find this comment misleading/incorrect:

  With 'cl-case', you would need to explicitly declare a local variable
  'code' to hold the return value of 'get-return-code'.  Also 'cl-case' is
  difficult to use with strings because it uses 'eql' for comparison.

In fact, with `cl-case' the code is at least as simple:

(let* ((val (get-return-code x))) 
  (if (stringp val)  (message val)
    (cl-case val
      (success       (message "Done!"))
      (would-block   (message "Sorry, can't do it now"))
      (read-only     (message "The shmliblick is read-only"))
      (access-denied (message "You do not have the needed rights"))
      (val           (message "You do not have the needed rights")))))

Yes, it's true that comparison is with `eql', so for a string value you
need to test that separately (or intern and then test symbols with
`cl-case').  But there's no need to use any `code' variable.

If you can't come up with a better example to show advantages of `pcase'
over `cl-case' (and that should be easy to do), then don't say anything
about `cl-case'.  Or maybe just tell the truth: `cl-case' handles _one
simple `pcase' use case_ in a simpler way.  IOW, if you're just testing
equality of the expression's value against particular symbols then
`cl-case' is simpler and clearer.

Even clearer is just this (same for the `pcase' example):

(message
 (let* ((val (get-return-code x))) 
   (if (stringp val) val
     (cl-case val
       (success       "Done!")
       (would-block   "Sorry, can't do it now")
       (read-only     "The shmliblick is read-only")
       (access-denied "You do not have the needed rights")
       (val           "You do not have the needed rights")))))

(And you've presumably misspelled schmilblick ;-):
https://en.wikipedia.org/wiki/Schmilblick)

In GNU Emacs 29.1 (build 2, x86_64-w64-mingw32) of 2023-08-02 built on
 AVALON
Windowing system distributor 'Microsoft Corp.', version 10.0.19045
System Description: Microsoft Windows 10 Pro (v10.0.2009.19045.3803)

Configured using:
 'configure --with-modules --without-dbus --with-native-compilation=aot
 --without-compress-install --with-tree-sitter CFLAGS=-O2'

Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XPM ZLIB

(NATIVE_COMP present but libgccjit not available)






^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-12-26 17:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-25 16:26 bug#68029: 29.1; (elisp) `pcase Macro': misleading mention of `cl-case' Drew Adams
2023-12-25 16:53 ` Stefan Kangas
2023-12-26 17:46   ` Drew Adams

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).