[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#68029: 29.1; (elisp) `pcase Macro': misleading mention of `cl-case'
From: |
Stefan Kangas |
Subject: |
bug#68029: 29.1; (elisp) `pcase Macro': misleading mention of `cl-case' |
Date: |
Mon, 25 Dec 2023 08:53:52 -0800 |
Drew Adams <drew.adams@oracle.com> writes:
> 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.
This shows that you do need to use a `code' variable (you named it `val'
though), and that the pcase version is indeed better.
> 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.
No, the reality is that `pcase' has *many* advantages over `cl-case'.
The example is just intended to showcase some of them.
> 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")))))
I'm not sure that's indeed easier for a beginner ELisp developer to
follow. So I don't think it's worth making that change.
> (And you've presumably misspelled schmilblick ;-):
> https://en.wikipedia.org/wiki/Schmilblick)
I don't follow, sorry.
So I'm closing this bug report.