Re: Just a thought... which of these is "better"?

Raimo Niskanen <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <[email protected]>
The 'rand' module is better.  The 'random' module implements
an old, statistically flawed Pseudo-Random Number Generator
and should not be used any more.
:
:
:
Joking aside; I guess you are saying that the verbose exception from
`rand:uniform/1` does not give any better understanding of the error,
which is that the argument `0` is out of range since it has to be
an `integer() >= 1`.

I agree that you have a point.  But introducing guards at every
API function that is a wrapper for another API function would just
be introducing redundant guards that may get out of sync with
each other in a future code update.

The actual problem here I'd say is that the exception from
`rand:uniform_s/2` is what you show here.

I think a good solution would be to implement
[`erl_error`](https://erlang.org/doc/man/erl_error.html)
exception formatting for the `rand` module.  Such an
implementation could easily add a line:

    *** argument 1: not of type integer() >= 1

to that exception printout.


On Mon, Oct 25, 2021 at 06:01:25PM -0500, Steve Davis wrote:
> > rand:uniform(0).
> ** exception error: no function clause matching 
>                     rand:uniform_s(0,
>                                    {#{bits => 58,
>                                       jump => #Fun<rand.3.47293030>,
>                                       next => #Fun<rand.0.47293030>,
>                                       type => exsss,
>                                       uniform => #Fun<rand.1.47293030>,
>                                       uniform_n => #Fun<rand.2.47293030>},
>                                     [287343104968817679|100345946487370353]}) (rand.erl, line 326)
>      in function  rand:uniform/1 (rand.erl, line 299)
> > random:uniform(0).
> ** exception error: no function clause matching random:uniform(0) (random.erl, line 119)

Cheers
-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.