[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Defaulting optional numeric and string arguments
From: |
Stefan Monnier |
Subject: |
Re: Defaulting optional numeric and string arguments |
Date: |
Thu, 12 Sep 2024 15:17:33 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
> I have an optional numeric argument n passed to a function.
>
> Am having difficulty setting a default for it to cater for both the
> interactive and non-interactive cases.
>
> Is the below how to do it ?
>
> (setq n (if (or (not n) (not numberp n)) 0 n))
Traditionally the default numeric value for an absent prefix arg is
1 rather than 0. So if you can arrange to use 1 as default, it'll
integrate better into the overall Emacs experience.
Also you can simply the above to
(unless (numberp n) (setq n 0))
> I also have an optional string bfrn, to which I am using
> (setq bfrn (if (or (not bfrn) (string= bfrn "")) "Context" bfrn))
I'd recommend to ignore the "" case (i.e. change your callers and/or the
interactive spec so they don't accidentally send the empty string
(e.g. use `read-string` rather than `read-from-minibuffer`)) and
just use:
(unless bfrn (setq bfrn "Context"))
- Stefan