pub fn select_char(
rnd: &mut impl Rng,
special: &[char],
preferred: &[RangeInclusive<char>],
ranges: &[RangeInclusive<char>],
) -> char
Expand description
Selects a random character the way CharStrategy
does.
If special
is non-empty, there is a 50% chance that a character from this
array is chosen randomly, and will be returned if that character falls
within ranges
.
If preferred
is non-empty, there is a 50% chance that any generation
which gets past the special
step picks a random element from this list,
then a random character from within that range (both endpoints inclusive).
That character will be returned if it falls within ranges
.
In all other cases, an element is picked randomly from ranges
and a
random character within the range (both endpoints inclusive) is chosen and
returned.
Notice that in all cases, ranges
completely defines the set of characters
that can possibly be defined.
It is legal for ranges in all cases to contain non-characters.
Both preferred
and ranges
bias selection towards characters in smaller
ranges. This is deliberate. preferred
is usually tuned to select
particular characters anyway. ranges
is usually derived from some
external property, and the fact that a range is small often means it is
more interesting.